2011-04-14 37 views
0

幾乎每次運行我的MVC應用程序時,它在進入主頁之前都會停止並出現錯誤。MVC會員問題

更新:這是最新的代碼:

public class RequireLoggedIn : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      if (Membership.GetUser() == null) 
      { 
       filterContext.Result = new RedirectResult("~/Logon"); 
      } 
     } 
    } 

    public ActionResult Index() 
    { 
     MembershipUser myObject = Membership.GetUser(); 
     Guid UserID = (Guid)myObject.ProviderUserKey; 

     DateTime dateTime = new DateTime(); 
     dateTime = DateTime.Now.AddDays(14); 

     var model = db.Task.Where(n => (n.UserId == UserID) && (n.Completed == false) && (n.Due < dateTime)); 
     return View(model); 

    } 

爲什麼這樣做呢?它在過去運行良好。

任何幫助,非常感謝。

+0

是我的對象爲空或只是提供關鍵? – Andrew 2011-04-14 10:56:34

+0

我不太確定,它是讓用戶ID在數據庫查詢中使用,並授權用戶。 – dalehumphries 2011-04-14 11:11:37

+0

你需要檢查你的用戶是否被授權,你可以檢查是否(myObject == null){RedirectToAction(「login」)}或類似的東西,但我會創建一個屬性來執行登錄檢查操作,經過身份驗證的用戶 – Andrew 2011-04-14 11:17:44

回答

0

我會添加一個屬性來檢查用戶是否登錄這個例子。您不希望該操作可用於未經身份驗證的用戶,因此無需在您的操作本身中對其進行管理。您可以使用Authorize來完成此操作,而不是您正在使用的形式。

退房這個問題太:Is the Authorize attribute in ASP .NET MVC used for Authentication as well as Authorization?

如果你想創建一個自定義屬性,我會建議,然後創建一個新ActionFilterAttribute

public class RequireLoggedIn : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
     if (Membership.GetUser() == null) { 
     filterContext.Result = new RedirectResult("~/Logon"); 
     } 
    } 
} 

然後,您可以裝飾你的任何在整個應用程序中執行此操作。 Simples :)

+0

哇,這是偉大的謝謝:)所以我只需要在我的HomeController的索引操作中引用此?我仍然需要兩行代碼給我帶來問題嗎? – dalehumphries 2011-04-14 11:37:30

+0

這意味着如果用戶沒有登錄你的ActionResult將不會執行你的自定義代碼,所以你不會在第一個問題:) – Andrew 2011-04-14 11:42:18

+0

保持它整齊把所有的屬性放在一個ActionFilterAttributes文件夾 - 你會結束我寫了很多我保證:) – Andrew 2011-04-14 11:43:35