我有一个相对未触及的MVC4项目,我的Web中有以下内容:.Release.config:
<system.web>
<customErrors mode="On" defaultRedirect="~/Error">
<error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
</system.web>
它没有工作 - 我在发布模式下获得了正常的错误页面。
如果我将该代码放在我的Web.Config中,它会按预期工作。我只想在Release中应用这个。
我也在web.release.config中试过这个:
<system.web>
<customErrors mode="On" defaultRedirect="~/Error" xdt:Transform="Replace">
<error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
无济于事。
为什么会这样?
更新:如果我在global.asax中使用以下内容:
void Application_Error(object sender, EventArgs e)
{
#if DEBUG
#else
Response.Redirect("/Error");
#endif
return;
}
我得到了理想的行为。我觉得我应该只能使用web.config设置......所以我想把它打开。
答案 0 :(得分:4)
问题是你没有发表。据我所知,web.release.config文件仅在发布期间进行转换。如果您只是在本地构建和运行该文件将不会被使用。
同样在您的Application_Error
中,您应该获取错误的状态代码。像
var exception = Server.GetLastError();
var httpException = exception as HttpException;
if (httpException != null)
{
if (httpException.GetHttpCode() == 404)
RedirectToMyNotFoundPage();
}
否则,您基本上只会处理所有错误,这些错误可能是您想要做的,也可能不是。
如果你想处理MvcErrors,并获得发生异常的控制器/动作,你应该查看过滤器。
这是一篇关于错误过滤的好文章,如果这就是你想要的。