我们为什么不用 MVC 拦截器
一:MVC 中的拦截器
众所周知,MVC 存在如下几个主要的拦截器:IActionFilter、IExceptionFilter、IResultFilter、IAuthorizationFilter,
但是我们并不用这些拦截器,因为:
我们的业务逻辑面向多个平台,即有 Winform,有 Web Mvc 控制器,还有 Ios 等手机终端,在这些前台调用我们的服务的时候,我们不想为每个平台或者框架,使用它们各自的拦截器。
即便我们的平台只使用 Mvc ,我们也不使用这些拦截器,因为
1:基于 Attribute 的拦截器不能接受运行时参数。在MVC 的拦截器中可以得到 Http 上下文,如果你的参数藏在 Http Header 或者 Content 中,你也许会说,我们可以很容易的在拦截器内部获取到这些参数。但是,谁说参数一定来自于 Http 中。
2:基于 Attribute 的拦截器只能在方法开始和结束的时候注入代码。这有时候是个优点,
所有,我们需要一个通用的拦截器。
二:通用拦截器
public JsonResult TestJson()
{
return FrontProtector.Do1<JsonResult>(()=>
{
JsonResult re = new JsonResult();
return re;
});
}public ActionResult TestAction()
{
return null;
}public int TestInt(){
return FrontProtector.Do2<int>(()=>
{
return 0;
});
}class FrontProtector
{
public static T Do1<T>(Func<T> func) where T: class
{
T t = default(T);
try
{
// 1: 记录日志;
// 2: 登录判断;
// 3: 如果有必要的话, 权限欺骗;
t = func();
return t;
}
catch
{
// 3: 包装异常;
if( t is JsonResult)
{
return new JsonResult() as T;
}
return new {} as T;
}
}
public static T Do2<T>(Func<T> func) where T: struct
{
T t = default(T);
try
{
t = func();
return t;
}
catch
{
return default(T);
}
}
}
我们为什么不用 MVC 拦截器的更多相关文章
- mvc拦截器
在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器.这里说的是第一种和第三种.其实所谓的ASP.NET MVC拦截器,也没什么神秘的,就是一个普 ...
- SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器
目录 2-2 Spring MVC拦截器 第一章 概述 第二章 Spring mvc拦截器的实现 2-1 拦截器的工作原理 2-2 拦截器的实现 2-3 拦截器的方法介绍 2-4 多个拦截器应用 2- ...
- spring mvc 拦截器的使用
Spring MVC 拦截器的使用 拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志 ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- Spring Boot 2.X(九):Spring MVC - 拦截器(Interceptor)
拦截器 1.简介 Spring MVC 中的拦截器(Interceptor)类似于 Servlet 开发中的过滤器 Filter,它主要用于拦截用户请求并作相应的处理,它也是 AOP 编程思想的体现, ...
- Spring MVC拦截器配置
Spring MVC拦截器配置 (1)自定义拦截器 package learnspringboot.xiao.other; import org.springframework.web.servlet ...
- 写的太细了!Spring MVC拦截器的应用,建议收藏再看!
Spring MVC拦截器 拦截器是Spring MVC中强大的控件,它可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作. 拦截器概述 对于任何优秀的MVC框架, ...
- 对于Spring MVC 拦截器的一些了解
Spring MVC 拦截器的执行顺序 应用场景 假设请求 localhost:8080/ 则要求直接重定向到 localhost:8080/login ; 定义拦截器顺序 permission lo ...
- Spring MVC拦截器浅析
Spring MVC拦截器 重点:Spring MVC的拦截器只会拦截控制器的请求,如果是jsp.js.image.html则会放行. 什么是拦截器 运行在服务器的程序,先于Servlet或JSP之前 ...
随机推荐
- 解决 Delphi XE5 写Android程序的No resource identifier found for attribute... 错误【转】
原文:http://www.hxhlb.cn/article/32142aaeb67bbc05379369c3.html 那一天,我装上了RAD Studio XE5. 当天晚上,我就写了一个小小的A ...
- CentOS6安装Jenkins
1.安装最新版JDK(作为JENKINS运行环境)# mount -t cifs //192.168.8.1/share /mnt -o username=share,password=share,n ...
- 关于日期转换的知识点(SimpleDateFormat)
这篇文章不是系统的学习,是阅读一些文章,然后总结汇总的. 一:SimpleDateFormat类 1.介绍 SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格 ...
- Chrome浏览器被hao123劫持,浏览器主页会被篡改为 hao123等
先放一个知乎帖子: https://www.zhihu.com/question/21883209 我就只放几个有效解决办法了,具体的可以看上边那个帖子 方案一: 删掉桌面上的chrome图标 ...
- DJANGO ADMIN 一些有用的设置(转)
DJANGO ADMIN 一些有用的设置 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...
- HNOI2018酱油记
按照惯例,每次比赛完以后都要写酱油记. Day0: 明天就要省选了,今天同学们都回去了(因为后天要去春游),整个年级只剩下竞赛生.本来打算晚上好好复习一下,结果......颓了一晚上......(好吧 ...
- 高能天气——团队Scrum冲刺阶段-Day 7 总结
高能天气--团队Scrum冲刺阶段-Day 7 总结 今日完成任务 于欣月:修改项目说明书,帮助修改应用 余坤澎:进行应用整合的收尾工作 康皓越:进行应用整合的收尾工作 范雯琪:修改项目说明书,完成项 ...
- Codeforces Round 542 (Div. 2)
layout: post title: Codeforces Round 542 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- Cmd2001的毒瘤水题题解
怕不是我再不写题解这题就该成没人做也没人会的千古谜题了...... T1: 仔细分析题面,发现相同就是广义SAM上节点相同,相似就是广义SAM上为从根到某个点路径的前缀..直接SAM上跑从根开始,每个 ...
- 【转载】gdi+ 内存泄漏
[转载]http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI+实现了几个自定义控件,但是发现存在内存泄露问题 B ...