2013-10-04 95 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