2012-04-24 106 views
2

我想在我的MVC 3 Web应用程序中设置http自定义错误页面。我已经添加了以下到我的web.config:httpErrors不重定向到正确的页面与MVC 3

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteUrl" defaultPath="/Error/404"> 
    <clear /> 
    <error statusCode="500" path="/Error/404" 
</httpErrors> 

当一个请求我预计这将用户重定向my.domainname.com/Error/404出现500错误。

我有一个错误控制器,其中包含一个称为错误的操作,我已将404的请求映射到此操作。

当我强迫网站上的500错误(通过Chrome开发者工具的网络选项卡验证)我收到一个空白页以下消息:

“该页面无法显示,因为发生了内部服务器错误。 “

如果我从我的web.config中删除httpErrors部分,那么我会得到实际的异常消息。因此,我在web.config中的httpErrors部分必须工作,我只是不明白如何正确设置它。

这是我选择的属性,为什么清单:

errorMode =“自定义”:那么,我可以看到自定义错误页,并验证它正在将其更改为仅本地之前。

defaultResponseMode =“ExecuteUrl”:这应该允许我指定一个服务器相对url作为路径,这听起来像我想要的,因为我想要控制器操作。

defaultPath =“/ Error/404”:如果我没有指定一个,我想要求的相对url。

编辑:

我应该补充说,该网站在IIS 7.5上运行。我也不希望使用这个标签,因为它被设计为与IIS 6一起使用,并且应该用于IIS 7+。

回答

0

尝试使用web.config(内部system.web)中的customErrors部分代替。

http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx

例如

<customErrors mode="On"> 
     <error statusCode="404" redirect="Error/404" /> 
     <error statusCode="500" redirect="Error/500" /> 
    </customErrors> 
+0

对不起,我会更新我的问题。它确实与customErrors部分一起工作,但这不是一个理想的解决方案,因为它们现在是一个遗留选项,并且设计用于IIS 6. – Aesir 2012-04-24 11:34:36

+0

设置defaultResponseMode =“重定向”并将路径设置为绝对URL是否工作?我知道这不完全是你想要的,因为使用相对路径更好,但可能有助于调试问题。 – 2012-04-24 11:51:12

+0

在这种情况下,我无法设置绝对路径,因为子域可能会有所不同,并可供用户更改。所以my.domainname.com可以是test.domainname.com等。所以我需要的路径是相对的。 – Aesir 2012-04-24 13:31:45

0

它应该像Controller/Action/Id。在你的情况下,行动缺失。检查以下示例,并根据您的操作方法更改它...

<system.web> 
    <customErrors mode="On" defaultRedirect="/Error/Index/" > 
     <error statusCode="401" redirect="/Error/NoAccess/" /> 
     <error statusCode="404" redirect="/Error/NotFound/" /> 
    </customErrors> 
    .... 
</system.web> 
+0

我的控制器是错误的,我在这个控制器上的动作也是错误的,但我已经映射404到这个动作。因此Error/404应该可以正常工作,如果我直接提出这个请求:my.domainname.com/Error/404会显示正确的页面。我也更新了我的问题,指定我不想将CustomErrors部分用作解决方案。干杯! – Aesir 2012-04-24 11:43:13

+0

看看这里。它可能会帮助你http://stackoverflow.com/questions/3554844/asp-net-mvc-404-handling-and-iis7-httperrors – Kaf 2012-04-24 12:18:56