2011-09-23 72 views
0

我試圖在我的MVC3站點中建議類似this article的建議。但是,我不確定我可以在Action中使用Response.End。Response.End在MVC3 Action中的使用

我的問題是,如果HttpContext.User == null,我該如何從我的Action返回一個401狀態碼?

public ActionResult WinUserLogOn(string returnUrl) { 
     var userName = string.Empty; 

     if (HttpContext.User == null) { 
      //This will force the client's browser to provide credentials 
      Response.StatusCode = 401; 
      Response.StatusDescription = "Unauthorized"; 
      Response.End(); 
      return View("LogOn"); //<== ???? 
     } 
     else { 
      //Attempt to Log this user against Forms Authentication 
     } 
+0

您發佈的代碼似乎有問題? – vcsjones

+0

我假設我的響應代碼和描述將在覆蓋視圖返回時被覆蓋。 –

+0

雖然m.edmondson對他的回答是正確的,但是Response.End()會將所有內容全部清除並殺死線程,因此,在Response.End後執行的操作並不重要,除非通過' 。這不像答案提供的那樣清楚。 – vcsjones

回答

5

這應該做你想要什麼:

return new HttpUnauthorizedResult(); 

將一個HTTP 401返回到瀏覽器。 See the docs

+1

+1。 Response.End沒有必要。 – StriplingWarrior

+0

雖然這工作,我不能像文章建議的東西工作。基本上所有發生的情況是,網站會重定向到LogOn頁面,因爲它應該在用戶未通過身份驗證時進行。我想這個解決方案不適用於MVC。 –