我已设置自定义错误处理程序,以便在发生崩溃时向用户显示诊断信息。问题是没有显示自定义错误页面,并且在尝试显示错误页面时抛出异常(根据网页)。虽然我无法弄清楚是什么原因造成的?我有类似的页面设置500和404错误,工作正常。
错误页面显示Server Error in '/' Application.
描述:处理您的请求时发生异常。此外,执行第一个异常的自定义错误页面时发生另一个异常。请求已终止。
Ill show显示我的设置片段,如果有人想看到更多,请询问。仅供参考我通过删除web.config
中的连接字符串详细信息来抛出异常(这是我们在部署期间看到的实际错误,因此我想专门针对此目的)
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" />
<error statusCode="404" path="/error/notfound" responseMode="ExecuteURL" />
<remove statusCode="403" />
<error statusCode="403" path="/error/forbidden" responseMode="ExecuteURL" />
<remove statusCode="500" />
<error statusCode="500" path="/error/" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
<!-- .... -->
<system.web>
<customErrors mode="On" defaultRedirect="~/Error" redirectMode="ResponseRewrite">
<error redirect="~/Error/NotFound" statusCode="404" />
<error redirect="~/Error/Forbidden" statusCode="403" />
<error redirect="~/Error/" statusCode="500" />
</customErrors>
</system.web>
然后我有一个带有默认Index()
函数的ErrorController(此控制器中没有断点被点击)
public ViewResult Index()
{
return View("Error");
}
注意:我有Forbidden()
和NotFound()
的功能 - 我只是没有在这里复制它们 - 这些错误完全正常。
答案 0 :(得分:2)
您是否拥有在web.config中指定的所有可用根?看起来您的控制器只有索引操作,返回一些视图,但它也应该有NotFound
和Forbidden
个动作,或者至少是正确的路径,例如:
routes.MapRoute(
"NotFound",
"Error/NotFound",
new { controller = "Error", action = "Index" }, //bind all routes to single action
null, controllerNamespaces
);
routes.MapRoute(
"Forbidden",
"Error/Forbidden",
new { controller = "Error", action = "Index" }, //bind all routes to single action
null, controllerNamespaces
);
答案 1 :(得分:1)
如果您没有设置NotFound和Forbidden操作,那么这些错误可能会导致第二个异常进入您的索引页面,因为它是默认值。尝试将其他两个控制器添加到控制器中,看看它们是否受到攻击,或许您可以更轻松地找到问题。
另请注意,ResponseRewrite与mvc不兼容,请参阅此处的答案:CustomErrors does not work when setting redirectMode="ResponseRewrite"
答案 2 :(得分:0)
重定向到另一个操作时,不能使用redirectMode =“ResponseRewrite”,必须使用redirectMode =“ResponseRedirect”。你将失去使用Server.GetLastError()的能力,但如果你不需要,你会没事的。