2017-05-03 128 views
0

我配置我的配置文件在MVC自定義錯誤。因此,自定義錯誤配置:配置自定義錯誤給出「錯誤太多重定向」在mvc

<customErrors mode="On"> 
    <error statusCode="401" redirect="~/Views/UnAuthorized/ErrorUnauthorised"/> 
    <error statusCode="404" redirect="~/Views/UnAuthorized/ErrorResourceNotFound"/> 
</customErrors> 
<authentication mode="Windows" /> 
<authorization> 
    <deny users="?"></deny> 
    <allow users="*"></allow> 
</authorization> 

和服務器

<httpErrors errorMode="Custom" > 
    <remove statusCode="401" /> 
    <error statusCode="401" path="http://localhost:port/UnAuthorized/ErrorUnauthorised" responseMode="Redirect" /> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="http://localhost:port/UnAuthorized/ErrorResourceNotFound" responseMode="Redirect" /> 
</httpErrors> 

我的錯誤頁面與其他配置文件不同的文件夾,允許未授權的用戶在:

<allow users="*"></allow> 

我錯誤頁面控制器是:

public class UnAuthorizedController : Controller 
{ 
    // GET: UnAuthorized 

    public ActionResult ErrorUnauthorised() 
    { 
     return View("ErrorUnauthorised"); 
    } 

    public ActionResult ErrorResourceNotFound() 
    { 
     return View("ErrorResourceNotFound"); 
    } 
} 

當我嘗試啓動應用程序時,它從這個頁面開始〜/ Views/UnAuthorized/ErrorUnauthorised並顯示瀏覽器消息「Too many redirects」當我刪除httpErrors部分時,應用程序通常以Index頁面啓動,但出錯時不會顯示了自定義錯誤頁

編輯 我結束了結論,即應用程序顯示錯誤「過多的重定向」如果我有我的配置文件都401和404錯誤。如果我刪除401錯誤,應用程序工作正常

+0

請檢查您是否創建了ErrorUnauthorised,ErrorResourceNotFound視圖。由於服務器在每個請求上提供了401,404個狀態碼,因此重定向過多。 –

+0

是的,我有每個頁面的意見,當我刪除httpErrors部分時,停止出現「太多重定向」消息,所以我想這不是從視圖 – Gamaboy

回答

0

您不需要httpErrors標記。只需添加下的System.Web

<customErrors mode="On" defaultRedirect="errorpage.htm?error=1" > 
     <error statusCode="404" redirect="filenotfound.htm?error=1" /> 
     <error statusCode="401" redirect="notauthorized.htm?error=1" /> 
</customErrors> 

注意事項如下:

1 - 我添加查詢字符串來通知asp.net,我不想加入的aspxerrorpath查詢字符串'錯誤= 1?當發生錯誤時。

2-將您的.htm文件放在應用程序根文件夾中。

3-如果您需要使用c#代碼生成一些消息並將它們顯示在錯誤頁面中,則使用global.asax中的application_error事件捕獲相關錯誤並將用戶重定向到所需頁面。

+0

它不處理401錯誤。它顯示我的身份驗證窗口要求密碼和用戶名爲特定的頁面,當我取消身份驗證窗口時,它會引發401錯誤,而不是我的自定義NotAuthorized頁面 – Gamaboy

+0

mmm,對不起,我從來沒有試過這樣處理Windows認證窗口。嘗試找到一種通過代碼處理它的方法,它必須是global.asax文件中的事件。 –