2016-07-25 190 views
0

注意:不知道以下是做我想做的正確方法。每個請求自動加載模型

背景:我有一個論壇(php),我創建了一個獨立於論壇的asp.net MVC web應用程序,除了登錄數據。用戶通過論壇註冊並登錄,但應用程序需要通過從cookie中讀取會話散列並將其與論壇的登錄用戶數據庫進行比較來檢查登錄狀態。

目的:我在每個請求中包含我的UserModel類,以查看用戶是否具有某些權限來執行他要做的事情。也爲我的觀點來顯示用戶相關的數據。

我是否需要在應用程序中爲每個控制器的操作手動添加這樣的內容?

public ActionResult Index() 
    { 
     UserRepository userRep = new UserRepository(); 
     UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value); 

     //do stuff with user 
     ... 

     return View(myViewModel); 
    } 

回答

0

看看ValidationAttribute。你可以滾你自己的,並有自己的自定義邏輯在裏面:

public class CustomAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     UserRepository userRep = new UserRepository(); 
     UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value); 

     if (user == null) { 
      // Redirect to login? 
     } 
    } 
} 

然後你可以裝飾你的方法是這樣的:

[CustomAttribute] 
public ActionResult Index() 

或者,如果你也將需要把它應用到每一個HTTP方法在你的班級,你可以在課堂級別裝飾它:

[CustomAttribute] 
public class MyClass 
+0

謝謝,我可以然後訪問'UserModel用戶'裏面的裝飾方法?或者我仍然需要「手動」加載它? – Cornwell

+0

@Cornwell你仍然會手動加載它,但沒有理由不能創建用戶服務並調用一個方法來返回用戶,所以你不必重複相同的代碼 – ediblecode