.Net6 .Net Core过滤器与全局过滤器的配置

过滤器的几个问答

问题

答案

什么是过滤器?

过滤器可以将逻辑应用于操作方法,而不必在控制器类中添加代码

过滤器有什么作用?

过滤器允许应用不属于操作的经典MVC模式定义的代码。可以实现更简单的控制器类和可重用的功能,并且可在整个应用程序中应用

如何使用过滤器?

MVC 可通过不同的方式使用不同类型的过滤器。创建过滤器的最常见方法是类,该类将MVC为所需的筛选类型提供的属性作为子类

过滤器有什么陷阱或限制吗?

 

不同类型的过滤器提供的功能有重叠,有时候很难选择需要哪种类型的过滤器

除了过滤器还有其他的选择吗?

 

没有,过滤器是MVC的核心功能,用于实现日常所需的功能,比如用户授权

过滤器实现了IFilterMetadata接口,该接口命名空间为Microsoft.AspNetCore.Mvc.Filters。

该接口是空的,不需要过滤器来实现任何特定的行为。这是因为还有几种不同类型的过滤器

 

不同类型的过滤器

过滤器

接口

描述

授权过滤器

IAuthorizationFilter  IAsyncAuthorizationFilter

最先执行,用于判断用户是否授权如果未授权直接结束当前请求

资源过滤器

IResourceFilter

 

在Authorization后执行,可以用来对请求判断是否执行Action

操作过滤器

IActionFilter  IAsyncActionFilter

在Action执行的前后执行,与Resource不同的是,它在模型绑定之后执行。

结果过滤器

IResultFilter  IAsyncResultFilter

 

在最后执行,可以控制Action执行的结果

异常过滤器

IExecptionFilter IAsyncExecptionFilter

 

用于捕获异常

 

过滤器以FilterContext对象的形式提供上下文数据,FilterContext派生值ActionContext , ActionContext也是ControllerContext的基类。

FilterContext类的属性

属性

描述

ActionDescriptor

返回一个ActionDescriptor描述了操作方法

HttpContext

返回一个HttpContext对象,该对象提供HTTP请求的详细信息以及要作为回复的HTTP响应

ModelState

返回一个ModelStateDictionary对象,用于验证客户端发送的数据

RouteData

防护一个RouteData对象,描述路由系统处理请求的方式

Filters

返回以应用于操作方法的过滤器列表,表示为IList

在配置文件Startup的ConfigureServices方法设置全局过滤器

public void ConfigureServices(IServiceCollection services)

{

    services.AddMvc().AddMvcOptions(option =>

    {

        option.Filters.AddService(typeof(ViewResultDiagnostics));

        option.Filters.AddService(typeof(DiagnosticsFilter));

    });

}

你可能感兴趣的:(ASP.Net,MVC,.net)