• 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

  • 相关阅读:
    Python 面向对象(类与对象)
    修改Centos文 7件夹所在组及权限(不同用户共用一个文件夹)
    CGPoint,CGSize,CGRect
    关于投资币圈的思考和微信群问答干货整理
    数字货币合约交易基础知识
    比特币成长大事记
    健康医疗笔记(四)癌症知识
    ​阿德勒心理学《被讨厌的勇气》一切烦恼皆源于人际关系
    免费学术论文网站Sci-Hub
    数字货币交易所开发笔记3-撮合引擎开发
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/7911147.html
Copyright © 2020-2023  润新知