2009-01-29 46 views
10

我試圖理解錯誤處理在MVC預覽使用授權[授權]操作過濾器時,是如何工作的4ASP.Net MVC授權行爲過濾

我有一個看起來像這樣的動作:

[Authorize(Roles = "DOMAIN\\NOTAUTHORISED_ROLE")] 
[HandleError] 
public ActionResult NeedAuthorisation() 
{ 
    throw new NotImplementedException(); 
} 

當我訪問網址:http://localhost:2197/testAuthorisation/NeedAuthorisation時,我在瀏覽器中得到一個空白頁面。在Firebug中,我可以看到發出了一個請求,並返回了401 - Unauthorised的響應狀態。但我沒有被重定向或返回customError。使用我獲得授權的角色時,一切都按預期工作。

這是使用Windows身份驗證。我正在編寫一些代碼來嘗試表單身份驗證,看看我是否得到相同的問題。 我有<customerrors mode="On"/>集,並在testAuthorisation文件夾和共享文件夾中創建了錯誤頁面。

回答

11

我終於找到this MVC tutorial這解決了我的問題:

究竟是什麼,當你試圖調用一個控制器動作 沒有被正確的權限發生取決於啓用 身份驗證的類型。默認情況下,當使用ASP.NET Development 服務器時,您只需獲得一個空白頁面。該頁面的授權HTTP響應狀態爲401 Not 。

0

如果您將CustomErrors設置爲Off或RemoteOnly,那麼您將不會被重定向到由HandleError指定的頁面(默認爲Error.aspx)。將其設置爲「開」,然後看看會發生什麼。明確指定的任何自定義錯誤頁將優先考慮,然而,你需要刪除這些了,剛纔:

<customErrors mode="On" />

+0

謝謝,但我已設置customErrors。這不是幫助 – Lewis 2009-01-29 13:36:14

0

您需要在相應的視圖文件夾中的錯誤觀點,即你需要的文件Views/TestAuthorization/Error.aspx爲了有什麼東西出現。

您還可以通過您想要使用的視圖以及想要觸發哪個異常的行爲來執行customize this行爲。

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]] 
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]] 
+0

謝謝,但我已經有錯誤視圖,我有一個在共享文件夾。兩者都像我所期望的那樣工作(例如,當我從該方法拋出NotImplementedException時)。 – Lewis 2009-01-29 13:40:19