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

  • 相关阅读:
    Linux下忘记MySQL密码的解决办法
    Jenkins——为什么使用持续集成?
    JBoss7部署EJB连接MySQL
    同一进程中的线程有哪些资源可以共享(转)
    基于ssh开发web项目-用户登录流程
    mysql-5.6.16安装流程
    Spring学习笔记
    Hibernate持久化对象状态、转换方法和操作步骤
    Hibernate配置文件与关联映射介绍
    Java的hashCode方法
  • 原文地址:https://www.cnblogs.com/nicopoiduang/p/7911147.html
Copyright © 2011-2022 走看看