2017-05-03 75 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文件中的事件。 –