2

我的 Web.Release.config 中有一个相对未受影响的 MVC4 项目,其中包含以下内容:

<system.web>
<customErrors mode="On" defaultRedirect="~/Error">
  <error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
</system.web>

但它不起作用 - 在发布模式下我得到正常的错误页面。

如果我将该代码放在我的 Web.Config 中,它会按预期工作。我只希望在发布时应用它。

我也在 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 设置......所以我想保持打开状态。

4

1 回答 1

4

问题是你没有发布。据我所知,web.release.config 文件仅在发布期间进行转换。如果您只是在本地构建和运行,则不会使用该文件。

同样在你的Application_Error你应该得到错误的状态码。就像是

var exception = Server.GetLastError();

var httpException = exception as HttpException;

if (httpException != null) 
{
    if (httpException.GetHttpCode() == 404)
        RedirectToMyNotFoundPage();

} 

否则,您基本上只会处理所有错误,这可能是您想要做的,也可能不是。

如果您想处理 MvcErrors,并获取发生异常的控制器/操作,您应该查看过滤器。

如果这就是你想要的,这里有一篇关于错误过滤的好文章。

http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx

于 2013-10-05T00:37:52.187 回答