C# ASP.NET WebAPI 中有哪些不同类型的过滤器?
过滤器用于在 WebApi 框架请求处理的不同级别注入额外逻辑。过滤器提供了一种跨切关注点(日志记录、授权和缓存)的方法。过滤器可以以声明式或编程式的方式应用于操作方法或控制器。以下是 Web API C# 中的过滤器类型。
身份验证过滤器 −
身份验证过滤器帮助我们验证用户详细信息。在身份验证过滤器中,我们编写用于检查用户真实性的逻辑。
授权过滤器 −
授权过滤器负责检查用户访问权限。它们在框架中实现了 IAuthorizationFilter 接口。
Action 过滤器 −
Action 过滤器用于在 Action 方法执行之前或之后添加额外的逻辑。OnActionExecuting 和 OnActionExecuted 方法用于在 Action 方法执行之前和之后添加逻辑。
异常过滤器 −
当控制器方法抛出任何未处理的异常(非 HttpResponseException 异常)时,就会执行异常过滤器。HttpResponseException 类型是一种特殊情况,因为它是专门为返回 HTTP 响应而设计的。
覆盖过滤器 −
覆盖过滤器用于为单个 Action 方法自定义其他过滤器的行为。有时我们需要覆盖现有的过滤器。假设我们在控制器级别应用了过滤器,但控制器中有一个操作我们不想使用该过滤器,因此我们可以使用该过滤器的覆盖版本。
过滤器通常通过以下三种方式应用。
在控制器级别
在 ActionMethod 级别
在全局级别 (WebApi.Config.cs)
让我们看一个授权过滤器的实现示例及其工作原理。
示例
using System.Web.Http;
namespace DemoWebApplication.Controllers{
public class DemoController : ApiController{
[Authorize]
public IHttpActionResult Get(){
return Ok();
}
}
}
由于我们在操作方法上添加了 authorize 属性,因此应该使用适当的授权方式(例如 Bearer Token、API Key、OAuth 等)来访问该操作方法。未经授权的访问将导致 401 Unauthorized 响应,如下所示。


