2014-05-05 110 views
0

嗨傢伙即時通訊web.config中的CustomErrors有問題,我試圖顯示錯誤401的自定義頁面,但是當用戶嘗試訪問控制器並沒有授權。IIS返回302而不是401

在這種情況下,回報是302,但必須是401,我試圖用Application_EndRequest()在Global.asax中改變Response.Status代碼:

void Application_EndRequest(object sender, EventArgs e) 
{ 
    if (Context.Response.StatusCode == 302) 
    { 
     Context.Response.Clear(); 
     Context.Response.StatusCode = 401; 
    } 
} 

這個返回的錯誤是401,但不顯示自定義錯誤頁面,只是IIS

的默認消息

未經授權:訪問被拒絕由於憑據無效

如何使自定義錯誤顯示401錯誤的正確頁面?

+0

有關於啓用一些提示/禁用自定義重定向在http://stackoverflow.com/questions/1391373/how-do-i-check-for-a-302-response-webrequest –

+0

這適用於使用Visual Studio進行本地調試嗎?只有在IIS上運行時纔會出現此問題? – Yasser

+0

@亞瑟我收到這個問題在國際空間站上運行 –

回答

0

,我發現我的問題here

使用了重定向一個自定義的授權屬性的「存取遭拒」頁面中的解決方案

0

看看在MVC自定義錯誤的解決方案在https://stackoverflow.com/a/620559/686674

你想要覆蓋的Application_Error,而不是Application_EndRequest回答了計算器中的另一個問題。

+0

好吧..明天我會試試。但在我看來是一個徹底的修改..我想仍然使用ASP.NET –

0

如果您正在使用表單身份驗證,則401由ASP.NET在內部處理並用於質詢的挑戰/響應機制中。當您使用身份驗證時,您指定一個登錄頁面,並且當用戶未被授權時,他們將被重定向到該頁面以登錄。

401之間有一個區別,未經授權和403之間是禁止的。

如果您使用的是Windows身份驗證,摘要或基本,那麼您將得到一個401 Challenge彈出窗口。 ASP.NET攔截401,以便您不會彈出窗口,而是可以在窗體中處理身份驗證錯誤。

+1

的自定義錯誤我正在使用窗體身份驗證,我如何取消重定向到登錄頁面,並轉到我的自定義頁面的錯誤401? 我正在尋找一些與HttpResponse.SuppressFormsAuthenticationRedirect相關的,但它只支持.Net Framework 4.5 + –