关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » .NET »ASP.NET MVC使用Filter解除Session, Cookie等依赖

    ASP.NET MVC使用Filter解除Session, Cookie等依赖

    2014-10-26 00:00:00 出处:Champ_Keh
    分享

    该篇介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景。 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖。

    如果大家有什么好的Filter应用方法,希望一起多交流。

    阅读目录:

    一、Filter在MVC生命周期中的位置

    二、Filter常见的应用场景

    三、Filter的执行顺序

    四、MVC中常见的对于Session, Cookie的依赖

    五、使用Filter解除依赖

    1. Filter在MVC生命周期中的位置

    下面的图中, 一个完成的MVC的生命周期分为5个步骤, 对应图例中的1~5

    IIS中传递请求到程序 MVC根据Routing来选择由哪个Controller/Action来处理 Controller调用Model(业务逻辑)来处理数据 Controller选择一个view, 同时把需要呈现的数据交给View Engine呈现 最后,返回最终的Response到客户端

    Filter在MVC的生命周期中的角色就像是一个一个的截面,在MVC的处理过程中,拦截请求。

    Filter分为:

    Authorization filters – 需要实现IAuthorizationFilter接口,用于验证处理验证相关的操作

    Action filters –需要实现IActionFilter接口. 在Action处理的开始和结束做拦截操作

    Result filters – 需要实现IResultFilter接口. 在View呈现前和呈现后做处理

    Exception filters – 需要实现IExceptionFilter接口,只要是添加了Exception Filter的请求中出现异常,都会被拦截

    每个Filter的作用时机,对应于下图中的2a, 2b, 4a, 4b.

    asp.net-mvc-filter

    2. Filter常见的应用场景

    下面是个人在开发中,常用到的Filter处理:

    权限验证

    使用Authorization filters,拦截请求,在进入到Controller处理之前,验证用户是否登录或者登录用户是否有权限访问改页面。

    如果合法,就继续交由Controller处理,如果非法,中断流程,跳转到登录页面。

    日志记录

    通过Action Filter跟踪记录Action处理开始的时间,结束时间,访问的具体Controller和Action, 参数,访问者ip等信息。

    异常处理

    异常处理Exception filter能够在发生异常的时候,记录异常信息。假如是session过期引起的异常,则跳转到登录页面,假如是程序运行导致的无法处理异常,则跳转到友好的错误页面。

    提升SEO效果

    每篇博客文章的meta信息能够帮助提高SEO效果,但是很多人对于填写keyword, description等信息觉得太繁琐。

    可以使用Result filters,在最后呈现页面前,使用程序分析内容,提取keyword和description来,之后呢填充到meta信息中。

    这样,每篇博客文章都能够有程序实现最佳的SEO效果,甚至生成一份SEO报告出来。

    3. Filter的执行顺序

    Filter之间执行的顺序,首先根据类型区分:

    分别是Authorization filters, Action filters, Result filters. Exception Filter没有列入的原因是, 它是在发生异常的时候处理,没有特定的顺序。

     

    当同时一个类型的Filter的时候,执行顺序可以通过Filter的Order属性来排序。

    4. MVC中常见的对于Session, Cookie的依赖

    在Web程序中,对于Session和Cookie等的使用是必不可少的。

    比如, 很多的Action的代码中,会要从Session中获取当前登录用户信息:

    public ActionResult Index()
    {
         var user = Session[“UserAccuont”];//从Session中获取当前登录用户的信息
         //send email
         var email = user.Email;
         …………
    }

    上面的Index方法的问题就是和Session耦合,很难单元测试。

    下面介绍如何使用Filter来解除对于Session的依赖。

    5. 使用Filter解除依赖

    添加一个SessionUserParameterAttribute的Action Filter, 它的功能是:

    从Session中取得User, 将取得的User赋值给Action中的参数sessionUser.

    public class SessionUserParameterAttribute : ActionFilterAttribute
    {
           public override void OnActionExecuting(ActionExecutingContext filterContext)
           {
               const string key = "sessionUser";
    
               if (filterContext.ActionParameters.ContainsKey(key))
               {
                   filterContext.ActionParameters[key] = Session[“UserAccuont”];//为Action设置参数
               }
    
               base.OnActionExecuting(filterContext);
           }
    }

    改造后的Index Action方法如下:

    [SessionUserParameter]
    public ActionResult Index(UserAccount sessionUser)
    {
         //send email
         var email = sessionUser.Email;
         …………
    }

    这样Index方法就解除了对于Session的依赖, 而只是依赖于一个普通的实体类UserAccount.

    在单元测试中,只需要简单的构造一个UserAccount的对象就可以了。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Edge浏览器百度被劫持/篡改怎么办,地址后边跟着尾巴#tn=68018901_7_oem_dg

    Google Chrome 在 iPhone 上新增了 Safari 数据导入选项

    Windows 11专业版 KMS工具激活产品密钥的方法

    DEDECMS安全策略官方出品

    Microsoft Text Input Application 可以关闭吗?

    新版本QQ如何关闭自带的浏览器?

    C++编程语言中continue的用法和功能,附举例示范代码

    c++ map 的数据结构、基本操作以及其在实际应用中的使用。

    C语言如何避免内存泄漏、缓冲区溢出、空指针解引用等常见的安全问题

    C语言中的break语句详解

    IT头条

    马斯克2026最新采访总结:2040年,全球机器人数量将突破100亿台

    23:52

    专家解读|规范人工智能前沿业态健康发展的新探索:解读《人工智能拟人化互动服务管理暂行办法》

    00:54

    用至强 6高存力搞定MoE卸载!

    17:53

    美国将允许英伟达向中国“经批准的客户”出售H200 GPU

    02:08

    苹果与微信就15%手续费达成一致?腾讯未置可否

    22:00

    技术热点

    PHP 和 Node.js 的10项对比挑战

    Javascript闭包深入解析及实现方法

    windows 7、windows 8.1手动增加右键菜单功能技巧

    MYSQL出错代码大汇总

    windows 7假死机怎么办 windows 7系统假死机的原因以及解决方法

    Ubuntu(Linux)下配置IP地址的方法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。