zoukankan      html  css  js  c++  java
  • Web API Filter

    在Web Api中,有三种Filter

    Filter类型 实现的接口 描述
    Authorization IAuthorizationFilter 最先运行的Filter,被用作请求权限校验
    Action IActionFilter 在Action运行的前、后运行
    Exception IExceptionFilter 当异常发生的时候运行

    需要哪种过滤器就实现哪个接口

    下面主要说IAuthorizationFilter

    注意是 System.Web.Http.Filters 命名空间下的

    实现后会有一个AllowMultiple的属性和ExecuteAuthorizationFilterAsync的方法

    public class filter : IAuthorizationFilter
        {
            public bool AllowMultiple => throw new NotImplementedException();
    
            public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
            {
                throw new NotImplementedException();
            }
        }

    AllowMultiple是设置是否支持并发的属性,如果想要支持就把=>后面改为true

    public bool AllowMultiple => true;

    ExecuteAuthorizationFilterAsync 内

    return await continuation();就是继续向下执行

    return new HttpResponseMessage();就是中止操作,直接以HttpResponseMessage为返回值

    我们弄好了filter,怎么让它起作用?

    注册filter一共有三种方式

    第一种:

    在Action上添加特性 [AuthFilter]

    这样这个Action就会触发filter,适合单个Action的权限控制

    public class StudentController : ApiController
    {
        [AuthFilter]
        public string Post(CreateUser user)
        {
           return "";
        }
    }

    第二种:

    在Controller上添加特性 [AuthFilter]

    这样这个controller的所有action都会触发filter,适合整个controller的权限控制

    [AuthFilter]
    public class StudentController : ApiController
    {
        public string Post(CreateUser user)
        {
           return "";
        }
    }

    第三种:

    在App_Start的WebApiConfig中加入

    这样这个项目的所有controller所有action都会触发filter

    public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
    
                config.Filters.Add(new filter()); //添加过滤器
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }

    但是我们如果有个别action不想触发filter怎么办?

    可以在这个action上添加特性[AllowAnonymous],这样过滤器就会"放过"这个action

  • 相关阅读:
    向量的内积和外积
    软件姿态解算
    PLC与外接按钮开关接线方法图解
    关于三极管处于临界饱和状态的分析
    C语言中的volatile——让我保持原样
    C语言异或运算在程序设计中的妙用
    各种转PDF
    javax.mail发送邮件功能
    MySQL总结
    idea永久破解
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/7911147.html
Copyright © 2011-2022 走看看