我们为什么不用 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);
}
}
}
最新文章
- jquery 模拟 alert 手机,pc,平板 3合一
- 如何用JavaScript探测CSS动画是否已经完成
- [转]DllMain中不当操作导致死锁问题的分析&mdash;&mdash;DllMain中要谨慎写代码(完结篇)
- [iOS微博项目 - 1.3] - 内容对齐 TextAlignment &; VerticalAlignment &; HorizontalAlignment &; contentMode
- 第八章CDC设备
- 最简单的基于FFMPEG的封装格式转换器(无编解码)
- vim脚本及配置
- C语言 创建一个 txt 文件 bin输入字符 保存文件在工作文件夹里
- SVG 和字符图标
- 核心游记之 page_address_init
- Python读取ini配置文件
- 简单查询plan
- [Machine-Learning] 一个线性回归的简单例子
- wireshark过滤规则
- 搭建Redis缓存
- LOJ #2978「THUSCH 2017」杜老师
- python 输出“Hello, world”
- 2018牛客27---D---愤怒: (有关子序列的dp问题)
- sqlserver2008查询性能优化(文摘)
- vs2012添加自定义资源步骤