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
Web API Filter的更多相关文章
- WEB API Filter的使用以及执行顺序
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- Web API Filter ActionFilterAttribute 使用
WebApi 提供两种过滤器的类型: 1.ActionFilterAttribute 2.exceptionFilterAttribute 两个类都是抽象类,ActionFilter 主要实现执行请求 ...
- MVC和Web API 过滤器Filter
MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: · 授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是 ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理[转]
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- web api 开发之 filter
1.使用filter之前应该知道的(不知道也无所谓,哈哈!) 谈到filter 不得不先了解下aop(Aspect Oriented Programming)面向切面的编程.(度娘上关于aop一大堆 ...
- WEB API 系列(二) Filter的使用以及执行顺序
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- Web API的参数、多版本和Filter
一.关于API的参数a) Web API在WebApiConfig.cs中配置了路由模板,默认为"api/{controller}/{id}",这与MVC路由模板的区别在于没有{a ...
- Web API中常用Filter的执行顺序举例讲解
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
随机推荐
- jquery为元素绑定事件
语法 $(selector).live(event,data,function) 参数event 必需,规定附加到元素的一个或多个事件.由空格分隔多个事件,必须是有效的事件.data 可选,规定传递到 ...
- Python包结构和函数式编程
# 包的结构 |--包 |--|-- __init__.py 包的标志文件 |--|-- 模块1 |--|-- 模块2 |--|-- 子包(子文件夹) |--|--|-- __init__.py 包的 ...
- jsp js action之间传值
1.struts2 action如何向JSP的JS函数传值 action中定义变量 public class TestAction extends ActionSupport implements S ...
- POJ 2110
终于过了,SHIT,二分+DFS即可,二分区间,根据数字是否在区间内,变成迷宫题了.枚举第一个格子,二分上界,即可. #include <iostream> #include <cs ...
- 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理
这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...
- Ubuntu14.04编译WebRTC For Android代码 2014-07-24
整整快一年没有写博客了.近期基于Google开源的WebRTC项目做了一款音视频聊天的即时通信项目,期间在下载WebRTC代码时就碰到了一些问题.在此以作记录,也希望可以帮助到正在下载编译WebRTC ...
- mybatis使用generator自己主动生成代码时的类型转换
使用mybatis的generator自己主动生成代码,可是oracle数据库中number(6,2)总是自己主动转成BigDecimal.我想要转成的是float类型 这样就写了一个类型转换器,须要 ...
- windows 下载安装github
参考链接:http://download.csdn.net/download/devsplash/9683971
- TS4
类: 类与对象字面量和接口差不多,比较两个类类型的对象时,只有实例的成员会被比较. 静态成员和构造函数不在比较的范围内. class Animal { feet: number; constructo ...
- java中字符串编码转换
Java 正确的做字符串编码转换 字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码 ...