一: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);
        }
    }
}

最新文章

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

热门文章

  1. maven 配置阿里云仓库
  2. 牛客练习赛16 E - 求值
  3. zabbix3.4+grafana5.0.1数据可视化
  4. forEach的坑
  5. 【翻译】What is State Machine Diagram(什么是状态机图)?
  6. codevs 1077 多源最短路
  7. codevs 1086 栈 2003年NOIP全国联赛普及组
  8. dsu on tree题表
  9. Beta冲刺准备
  10. hdu 3534 树形dp ***