2015-06-08 39 views
1

我正在做一個ajax調用,如果用戶不是管理員,我想拋出401類型的錯誤 - 未經授權,然後讓web.config重定向用戶到我的拒絕訪問頁面:拋出401的錯誤未經授權,所以Web.config顯示適當的頁面

<customErrors mode="On"> 
    <error statusCode="500" redirect="~/InternalError.html"/> 
    <error statusCode="401" redirect="~/AccessDenied.aspx"/> 
</customErrors> 

正如你所看到的,我有一個類型500 - 內部服務器錯誤來處理其他錯誤。但是當我運行這段代碼:

 if (user.Type != AppUser.UserType.SystemAdministrator) 
      { 
       throw new HttpException((int)HttpStatusCode.Unauthorized, "Unauthorized"); 
      } 

web.config中認爲,500被拋出,顯示InternalError.htm而不是AccessDenied.aspx。我如何告訴我的ASP.NET應用程序拋出401而不是500,所以會顯示正確的錯誤頁面?

這不是MVC。

+0

可能重複(http://stackoverflow.com/questions/217678/how生成一個401錯誤編程方式在一個ASP網頁) – Caramiriel

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

改爲設置Response.StatusCode,它將觸發重定向。

或者,你可以用下面的:

throw new HttpException(401, "Unauthorized"); 
的[如何在ASP.NET頁面編程生成一個401錯誤]
+0

你的答案正是我正在做的,我仍然得到錯誤的錯誤頁面。我在一個靜態函數,如果這有助於 – BoundForGlory

+0

@BoundForGlory是公平的,你將轉換爲一個int HttpStatusCode,它可能會有點不同。此外,這只是答案的一個選項,我提供了關於如何設置「Response.StatusCode」的鏈接,您應該嘗試一下。可能有助於發佈整個方法,以便我們可以確切地看到還有哪些可能發生。這聽起來像你可能在某個地方有一個「catch」,它正在壓倒例外。 – ragerory

相關問題