天天看點

我們為什麼不用 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);              return default(T);  本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/p/3559230.html,如需轉載請自行聯系原作者