马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

ASP.NET MVC拦截器讲解

[复制链接]
查看7641 | 回复2 | 2016-12-21 09:26:56 | 显示全部楼层 |阅读模式
 1、为什么要用到过滤器。
    2、它能解决什么问题 
    3、是否会带来新问题,严重不,我们是否能够解决掉?


  在实际项目中,稍微像样点的项目总会有一些相关的AOP(面向切面,也叫做面向面)编程的组件,而MVC项目中太关心我们这些农民工啦,不想让MVC开发人员去为了身份验证、日志、异常等部分重复代码。于是我们在MVC项目中就可以直接使用它提供的Fileter特性帮我们解决,不用我们自己去实现复杂的AOP了。 

  以日志为例(记录操作日志):

[C#] 纯文本查看 复制代码
[LogActionFilter(Message="打开企业列表")]
          public ActionResult Index()
          {
                return View();
          }
  
   [LogActionFilter(Message="添加企业")]
          public ActionResult Add(Contact contact)
          {
                return View();
          }

  public class LogActionFilter : ActionFilterAttribute
  {
    public string Message { get; set; }
                public override void OnResultExecuted(ResultExecutedContext filterContext)
                {
                      //记录操作日志,写进操作日志中
                      var controllerName = filterContext.RouteData.Values["controller"];
                      var actionName = filterContext.RouteData.Values["action"];
                }

   }



在合适的地方用到适当的Filter,ASP.NET MVC提供了几个默认的Filter


      Filter Type                   实现接口                               执行时间                Default Implementation
Authorization filter
IAuthorizationFilter
在所有Filter和Action执行之前执行
AuthorizeAttribute
Action filter
IActionFilter
分别在Action执行之前和之后执行。
ActionFilterAttribute
Result filter
IResultFilter
分别在Action Result执行之后和之前
ResultFilterAttribute
Exception filter
IExceptionFilter
只有在filter,
或者 action method, 或者 action result 抛出一个异常时候执行

HandleErrorAttribute


















因为ActionFilterAttribute默认实现了IActionFilter和IResultFilter。而ActionFilterAttribute是一个抽象类型,所以不能直接被实例化使用,所以我们想使用的话必须继承一下才能够使用。我们可以重载ActionFilterAttribute类中的以下几个方法:

  OnActionExecuting – 在Action执行之前调用。
  OnActionExecuted – 在Action执行之后调用。
  OnResultExecuting – 在Result产生之前调用。
  OnResultExecuted – 在Result产生之前调用。



根据需要,我们可以在重载的方法中写入需要的代码,如上面代码中,我只是在OnResultExecuted方法中写入了一些方法,用来记录操作日志。如果用过滤器进行验证的话,可以在OnActionExecuting方法里面进行一些验证。过滤器是在对请求进行处理时对动作逻辑进行扩展的手段,而不需要把这种逻辑包含在动作方法中。

在ASP.NET MVC中还有哪些场合会用到过滤器呢?

    1.判断登录与否或用户权限
    2.决策输出缓存
    3.防盗链
    4.防蜘蛛
    5.本地化与国际化设置
    6.实现动态Action




C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
ibcadmin | 2016-12-21 09:27:33 | 显示全部楼层
222
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
即墨还雀 | 2016-12-21 09:29:49 | 显示全部楼层
135
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则