2013-10-04 91 views
2

处理我有我的Web.Release.config以下相对不变MVC4项目:自定义错误与MVC4

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

它不工作,虽然 - 我得到正常的错误页面,在Release模式时。

如果我将该代码放在我的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

问题是你没有发布。据我所知,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