使用MVC4进行自定义错误处理

时间:2013-10-04 22:49:42

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个相对未触及的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设置......所以我想把它打开。

1 个答案:

答案 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,并获得发生异常的控制器/动作,你应该查看过滤器。

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

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