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

  • 相关阅读:
    Websocket --socket.io的用法
    Vuex中mapState的用法
    vue中关于computed的一点理解
    webuploader大文件分片,多线程总结
    pdf的使用遇到的问题
    单文件WebUploader做大文件的分块和断点续传
    webUploader大文件断点续传学习心得 多文件
    iframe子页面与父页面元素的访问以及js变量的访问
    pwa 集合
    mpvue 转小程序实践总结
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/7911147.html
Copyright © 2011-2022 走看看