Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码


在ASP.NET MVC中,身份验证、异常处理和权限验证(通过拦截器实现)是常见的安全和管理需求。下面我将简要概述每个部分的实现思路,并给出简洁的代码示例。

### 1. 身份验证

ASP.NET MVC 支持多种身份验证方式,例如 Forms Authentication, Windows Authentication 等。这里以 Forms Authentication 为例,通常涉及到登录表单和验证逻辑。

**登录表单(View)**:


<!-- 登录表单省略详细HTML -->
<form action="/Account/Login" method="post">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <button type="submit">登录</button>
</form>

**登录控制器(Controller)**:


[HttpPost]
[AllowAnonymous]
public ActionResult Login(string username, string password)
{
    if (/* 验证用户名和密码 */)
    {
        FormsAuthentication.SetAuthCookie(username, false);
        return RedirectToAction("Index", "Home");
    }
    return View(); // 重新显示登录页面
}

### 2. 异常处理

ASP.NET MVC 提供了全局异常过滤器(Global Exception Filter)来处理未捕获的异常。

**全局异常过滤器**:


public class HandleErrorAttribute : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
        {
            return;
        }

        // 日志记录等操作

        filterContext.Result = new ViewResult
        {
            ViewName = "Error",
            ViewData = new ViewDataDictionary(filterContext.Controller.ViewData)
            {
                {"ErrorMessage", filterContext.Exception.Message}
            }
        };

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = 500;

        // 注意:在实际应用中,可能需要根据不同的异常类型返回不同的视图或执行不同的逻辑
    }
}

在 `FilterConfig.cs` 中注册此过滤器:


public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
}

### 3. 权限验证(拦截器)

在ASP.NET MVC中,拦截器通常通过Action Filters实现。下面是一个简单的权限验证Action Filter示例。

**权限验证Action Filter**:


public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
            return;
        }

        // 这里可以添加更复杂的权限检查逻辑
        // 例如检查用户是否属于某个角色或具有特定权限

        // 如果用户未通过权限检查
        // filterContext.Result = new ViewResult { ViewName = "AccessDenied" };
    }
}

在需要权限验证的Action或Controller上使用此Attribute:


[Authorize]
public ActionResult SensitiveAction()
{
    // 敏感操作
    return View();
}

这些示例提供了在ASP.NET MVC中实现身份验证、异常处理和权限验证的基本框架。根据实际需求,你可能需要调整和完善这些代码。