2

錯誤氣泡我試圖解決我的錯誤處理MVC了一下,從這裏實施Marco的解決方案:
ASP.NET MVC 404 Error Handling404通過MVC差錯控制

這完美的作品我Win7的工作站上。但由於某種原因,它不能在服務器上運行。 某些錯誤工作正常,但是例如,如果我調用一個不存在的控制器和路由,我將獲得標準的IIS 404頁面。

我已經放入了一些日誌,並調用Error404Controller並執行,但由於某種原因,處理不會停止,並且之後會加載IIS 404錯誤頁面。

這是我的Global.asax

protected void Application_EndRequest() 
{ 
    if (Context.Response.StatusCode == 404) 
    { 
     Response.Clear(); 

     var rd = new RouteData(); 
     rd.Values["controller"] = "Error404"; 
     rd.Values["action"] = "Index"; 

     IController c = new SuperMvc.Controllers.Error404Controller(); 
     c.Execute(new RequestContext(new HttpContextWrapper(Context), rd)); 
    } 
} 

代碼而這個控制器:

[AcceptVerbs(HttpVerbs.Get)] 
public virtual ActionResult Index() 
{ 
    log.Error("Error404Controller.Index"); 

    PageError error = new PageError(); 

    error.Url = Request.Url.AbsoluteUri; 
    log.Error("Request.Url=" + error.Url); 

    error.UrlReferrer = Request.UrlReferrer.AbsoluteUri; 
    log.Error("Request.UrlReferrer=" + error.Url); 

    return View(error); 
} 

任何想法?我檢查了web.config文件並找不到區別。

+0

當您嘗試控制器/動作不存在,你登錄狀態碼?當它達到這一點時它絕對是404嗎? (我想有時我曾經得到等等沒有實現IController - 這將是一個代碼500) – Carl 2014-10-03 11:14:34

+0

不,我在Application_EndRequest中得到404響應代碼並調用Error404Controller,但我仍然得到IIS 404錯誤頁面,而不是我的。 – Remy 2014-10-16 12:42:10

回答

2

如果在IIS7中,您將需要告訴IIS7忽略自定義錯誤頁面,使用Response.TrySkipIisCustomErrors = true;。這將按照the msdn禁用該響應的IIS自定義錯誤頁面。

所以你Application_EndRequest可能看起來像這樣:

protected void Application_EndRequest() 
{ 
    if (Context.Response.StatusCode == 404) 
    { 
     Response.Clear(); 

     var rd = new RouteData(); 
     rd.Values["controller"] = "Error404"; 
     rd.Values["action"] = "Index"; 

     Response.TrySkipIisCustomErrors = true; 
     IController c = new SuperMvc.Controllers.Error404Controller(); 
     c.Execute(new RequestContext(new HttpContextWrapper(Context), rd)); 
    } 
} 
+0

乾杯!您必須將添加到web.config中,然後它似乎工作。 – Remy 2014-10-16 16:06:37