目前在公司新开发了一个项目,第一次正式使用.NET MVC4来搭建,用拦截器来处理权限验证。

自定义拦截器需继承ActionFilterAttribute类,重写OnActionExecuting和OnActionExecuted方法来实现在控制器调用之前或之后切入,不过继承此类只可在Controller中使用,而非ApiController。

如果想自定义ApiController拦截器,需继承System.Web.Http.Filters.ActionFilterAttribute(类名虽一样,但命名空间不同)。

     public class ApiPermissionFilter : ActionFilterAttribute
{
#region 属性 /// <summary>
/// 数据权限编码
/// </summary>
public string Code
{ get; set; } #endregion public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
UserInfo service = new UserInfo(); try
{
if (!service.IsInPermission(Code))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
}
}
catch (Exception ex)
{
SmartCardCommon.LogHelper.WriteErrorLog(ex.Message, ex);
throw ex;
}
finally
{
SmartCardCommon.NhibernaterSessionHelper.CloseSession();
}
}
}

这样,同样可以用标记特性的方式来使用Api拦截器。

在拦截器中跳转页面,不可使用Response.Redirect方式,这样会遇到意外的错误。可以直接设置HTTP 状态码,以达到跳转到错误页的目的。

.NET MVC4 ApiController拦截器的使用的更多相关文章

  1. MVC webapi,Action的分别拦截器

    继承Controller,ApiController的拦截继承的接口不一样 webapi的拦截器:(继承System.Web.Http) using System; using System.Coll ...

  2. 6. ModelDriven拦截器、Preparable 拦截器

    1. 问题 Struts2 的 Action 我们将它定义为一个控制器,但是由于在 Action 中也可以来编写一些业务逻辑,也有人会在 Action 输入业务逻辑层. 但是在企业开发中,我们一般会将 ...

  3. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  4. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  5. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  6. 学习SpringMVC——拦截器

    拦截器,顾名思义就是用来拦截的. 那什么是拦截,又为什么要拦截.对于Spring MVC来说,拦截器主要的工作对象就是用户的请求,拦截下来之后,我们可以在拦截的各个阶段悉心呵护[为所欲为].常见的比如 ...

  7. alias拦截器的使用

    在SSH项目中,有时需要由一个Action跳转到另一个Action.有两种方式可以实现Action之间的跳转,一种是chain,另一种是redirectAction,这两种方式之间的区别是chain是 ...

  8. Struts2入门(二)——配置拦截器

    一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...

  9. 通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录

    java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务 ...

随机推荐

  1. ENVI5.1安装破解教程

    原文地址:  ENVI5.1安装破解_百度经验 http://jingyan.baidu.com/article/020278118b5ded1bcd9ce57a.html   ENVI5.1_x86 ...

  2. php Ajax 局部刷新

    php Ajax 局部刷新: HTML部分 </head> <body> <h1>Ajax动态显示时间</h1> <input type=&quo ...

  3. 初始化windows窗口

    LRESULT WINAPI WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT ps; switch (msg ...

  4. Hadoop分布式文件系统(HDFS)详解

    HDFS简介: 当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区 (partition)并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统成为分布式文件系统 (D ...

  5. WinCE下VPN设置

    一.环境 1.      WinCE5.0+2004/2005/2006/2007补丁. 2.      3G拨号模块. 二.说明 1.      WinCE设备必须可以接入网络. 2.      支 ...

  6. 【HDOJ】4297 One and One Story

    综合性很强的题目.存在环,可以用tarjan处理,然后需要求LCA.并查集+RMQ可以搞.非常不错的题目. /* 4297 */ #include <iostream> #include ...

  7. makeBackronym

    makeBackronym  主要考查的是字符串的处理,大小写转换,以及字符串的Linq处理 Description: Definition- back·ro·nym noun a fanciful ...

  8. UVa 1395 (最小生成树) Slim Span

    题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...

  9. C#中哈希表与List的比较

    简单概念 在c#中,List是顺序线性表(非链表),用一组地址连续的存储单元依次存储数据元素的线性结构. 哈希表也叫散列表,是一种通过把关键码值映射到表中一个位置来访问记录的数据结构.c#中的哈希表有 ...

  10. shape的属性

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...