2013-07-17 34 views
0

我是新來的MVC,並試圖讓我的頭在控制器周圍。請您可以對以下情況發表評論?:跨所有控制器實現ActionResult

用戶在使用應用程序時必須接受「隱私策略」屏幕,這是我們應用程序的業務需求。我通過在用戶單擊初始Home控制器索引視圖中的鏈接時設置cookie來實現此目的。

但是,我需要確保我們應用程序中的任何入口點(即,不僅僅是從索引頁面,而是應用程序中的任何地方)檢查cookie的存在。對我來說,值可以由每個控制器檢查,但我不想在每個控制器上覆制相同的「如果存在cookie做某事」代碼。那麼有沒有更高層次的我可以寫我的方法?

希望這是有道理的!

回答

0

編寫一個包含您的cookie驗證碼的自定義基本控制器(它本身繼承了標準的ASP.NET MVC控制器),然後讓您的其他控制器派生出來。

例如,要確保所有我的行爲在默認情況下要求用戶進行身份驗證,我用類似這樣的東西作爲基礎的控制器:

[Authorize] 
public class CoreController : Controller 
{ 
    /* ... */ 
} 

然後我的家控制器的樣子:

public class HomeController : CoreController 
{ 
    /* ... */ 
} 
+0

我喜歡這裏提出兩種方法,但我第一次實現你的。謝謝你的評論(我不能相信我忽略了這麼簡單的東西!) – Annie

+0

你可以將兩種方法結合起來;如果每個操作都需要進行cookie驗證,則將該屬性添加到核心/基本控制器。但有人認爲:您可以將隱私策略接受爲認證條件,然後使用ASP.NET MVC遵循的正常授權模式。 –

1

使用自定義ActionFilterAttribute。

創建一個類CheckCookie:

public class CheckCookie : ActionFilterAttribute 
    { 

     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      if (!CookieExists)// Check the Cookie exists 
      { 
       //Redirect if the cookie does not exists 
       filterContext.Result = new RedirectResult("~/Redirect/NoCookie"); 
       return; 
      } 
     } 
    } 

控制器:

[CheckCookie]//Check the Cookie exists 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

要去閱讀有關ActionFilters - 這個答案聽起來像是一個有趣的方式來解決這個問題。謝謝您的意見! – Annie

相關問題