2012-08-13 43 views
0


這個問題基本上是要知道和證明我所做的是一種好的做法,還是有任何其他方法來實現問題的解決方案。
這是問題....

*我有一個MVC應用程序與許多控制器和操作方法。客戶將訪問來自不同來源(谷歌,Bing,第三方網站)的不同操作方法,最後添加查詢字符串簽名。

*因爲我不想檢查控制器的每個動作中的查詢字符串值。我創建了一個從MVC控制器類繼承的新控制器「BaseController.cs」。並實現以下代碼。所有應用程序控制器都將從BaseController繼承。

創建用於捕獲查詢字符串值的自定義基礎控制器。是好是壞?

public class BaseController : Controller 
    { 
     public BaseController():base() 
     { 
      string siteReference = HttpContext.Request["ref"]; 
     } 
    }


我請求MVC的專家提出更好的方法。提前致謝。

-kk

回答

3

有一個不太obstrussive辦法做到這一點,你可以使用一個全球行動過濾器做相同的,而不必使用一個基本的控制器,以及你是否贊成在組成繼承。

public class GetQueryString: IActionFilter, IMvcFilter 
    { 

     public void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      string siteReference = filterContext.HttpContext.Request["ref"]; 
     } 


     public void OnActionExecuted(ActionExecutedContext filterContext) 
     { 

     } 


     public bool AllowMultiple 
     { 
      get { return false; } 
     } 

     public int Order 
     { 
      get { return Filter.DefaultOrder; } 
     } 
    } 
+0

+1如果您包含操作過濾器的示例... – EkoostikMartin 2012-08-13 17:43:55

+0

您爲什麼贊成Compsition over Inheritance?介意解釋一個更好的原因? – Pluc 2012-08-13 17:44:44

+0

真棒...感謝包含示例... – Krishna 2012-08-13 17:51:46

相關問題