在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中实现身份验证、异常处理和权限验证的基本框架。根据实际需求,你可能需要调整和完善这些代码。