目录
全局注册
ServiceFilter
TypeFilter
IFilterFactory
全局注册
Startup.cs ConfigureServices 添加配置
//以注册ExceptionFilter为例
services.AddControllersWithViews(options=> {
//实际上是交给MVC容器来进行处理
options.Filters.Add(typeof(CustomExceptionFilterAttribute));
});
ServiceFilter 注册
//使用ServiceFilter特性进行注册
//将该特性应用到控制器中
//typeof 类型可变
[ServiceFilter(typeof(CustomExceptionFilterAttribute))]
public class FilterController : Controller
{
public IActionResult Index()
{
int m = 0;
int j = 190;
int e = j / m;
return View();
}
}
//在使用ServiceFilter时需要在Startup ConfigureServices方法中注册对应事件
//注册对应事件
//使用AddTransient或AddSingleton
services.AddTransient<CustomExceptionFilterAttribute>();
TypeFilter注册
//TypeFilter与ServiceFilter用法类似 区别在于TypeFilter不需要在Startup中进行注册
[TypeFilter(typeof(CustomExceptionFilterAttribute))]
public class FilterController : Controller
{
public IActionResult Index()
{
int m = 0;
int j = 190;
int e = j / m;
return View();
}
}
IFilterFactory注册
//使用IFilterFactory注册时需要实现接口对象IFilterFactory
//新增类CustomFilterFactoryAttribute实现接口对象IFilterFactory
public class CustomFilterFactoryAttribute : Attribute,IFilterFactory
{
private Type _FilterType = null;
public CustomFilterFactoryAttribute(Type type)
{
this._FilterType = type;
}
public bool IsReusable => true;
/// <summary>
/// 容器的实例 构造对象后进行依赖注入
/// </summary>
/// <param name="serviceProvider"></param>
/// <returns></returns>
public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}
return (IFilterMetadata)serviceProvider.GetService(_FilterType);
}
}
//将IFilterFactory实现后 在控制器中进行应用 后续应用方式和ServiceFilter 注册相同
//CustomFilterFactory为自定义的特性名称
[CustomFilterFactory(typeof(CustomExceptionFilterAttribute))]
public class FilterController : Controller
{
public IActionResult Index()
{
int m = 0;
int j = 190;
int e = j / m;
return View();
}
}
//在使用IFilterFactory时需要在Startup ConfigureServices方法中注册对应事件
//注册对应事件
//使用AddTransient或AddSingleton
services.AddTransient<CustomExceptionFilterAttribute>();