如何在 ASP.NET MVC 中创建自定义过滤器?
您可以通过实现要为其创建自定义过滤器的相应过滤器接口,并派生 FilterAttribute 类来创建自定义过滤器属性,从而将该类用作属性。
例如,实现 IExceptionFilter 和 FilterAttribute 类来创建自定义异常过滤器。同样,实现 IAuthorizationFilter 接口和 FilterAttribute 类来创建自定义授权过滤器。
示例:自定义异常过滤器
class MyErrorHandler : FilterAttribute, IExceptionFilter
{
public override void IExceptionFilter.OnException(ExceptionContext filterContext)
{
Log(filterContext.Exception);
base.OnException(filterContext);
}
private void Log(Exception exception)
{
//log exception here..
}
}
或者,您也可以派生内置过滤器类并重写适当的方法来扩展内置过滤器的功能。
让我们通过派生内置的 HandleErrorAttribute
类并重写 OnException
方法来创建一个自定义异常过滤器,以记录每个未处理的异常,如下所示。
示例:自定义异常过滤器
class MyErrorHandler : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Log(filterContext.Exception);
base.OnException(filterContext);
}
private void Log(Exception exception)
{
//log exception here..
}
}
您现在可以在全局级别、控制器或操作方法级别应用 MyErrorHandler
属性,就像我们应用 HandleError
属性一样。
示例:将自定义操作过滤器应用于控制器
[MyErrorHandler]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}