2013-01-24 122 views
1

我在我的項目中實現了自定義錯誤功能,並且它在本地IIS上工作,但不在活服務器上工作。我已經使用Global.asax文件實現了此功能,並且在MVC中的自定義錯誤控制器中調用了我的自定義錯誤操作方法。我已經發布並運行本地IIS及其工作,但在實時服務器上運行。自定義錯誤頁面不在活服務器上工作

我的Global.asax.cs文件

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    //do not register HandleErrorAttribute. use classic error handling mode 
    filters.Add(new HandleErrorAttribute()); 
} 

protected void Application_Error(Object sender, EventArgs e) 
{ 
    LogException(Server.GetLastError()); 

    CustomErrorsSection customErrorsSection = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors"); 
    string defaultRedirect = customErrorsSection.DefaultRedirect; 
    if (customErrorsSection.Mod e== CustomErrorsMode.On) 
    { 
     var ex = Server.GetLastError().GetBaseException(); 

     Server.ClearError(); 
     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "Common"); 
     routeData.Values.Add("action", "CustomError"); 

     if (ex is HttpException) 
     { 
      var httpException = (HttpException)ex; 
      var code = httpException.GetHttpCode(); 
      routeData.Values.Add("status", code); 
     } 
     else 
     { 
      routeData.Values.Add("status", 500); 
     } 

     routeData.Values.Add("error", ex); 

     IController errorController = new Test.Controllers.CommonController(); 
     errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 
    } 
} 

我的自定義錯誤控制器及其操作方法

public ActionResult CustomError(int status, Exception error) 
{ 
    var model = new CustomErrorModel(); 
    model.Code = status; 
    model.Description = Convert.ToString(error); 
    Response.StatusCode = status; 
    return View(model); 
} 

那麼,應該怎麼辦?

+2

我建議你提供一些代碼讓我們來看看.. –

+0

我們可以看到一些碼?你的web.config安裝是否正確?你還沒有給我們很多信息繼續下去。 –

+0

本地IIS和Live IIS的含義是什麼?我認爲你需要檢查IIS配置。 –

回答

1

2接近

路由方法

// We couldn't find a route to handle the request. Show the 404 page. 
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "CustomError" }); 

定製錯誤處理程序Web.config中

<customErrors mode="On" > 
    <error statusCode="404" redirect="~/CatchallController/CustomError" /> 
</customErrors> 

條件RAI sed沒有路由匹配是一個404.這種方式你直接所有不匹配到你的~/CatchallController/CustomError

+0

但這兩種方法都會在瀏覽器中產生'200 OK'狀態,而所需的行爲是獲得'404'。其實我碰到過這個問題,當Casini在沒有路由匹配的時候調用Application_Error,但是IIS Express沒有(它顯示它的標準404錯誤報告)。有沒有辦法在IIS Express中同時獲得'HTTP ERROR 404'狀態和自定義錯誤頁面(我沒有在IIS上檢查所有這些)? – horgh

+0

@KonstantinVasilcov,自從我看到這個OP以來,這是一個月。我仍然想着它再次。從現在看,我認爲目標是優雅地捕捉404 ...... –

4

我有這個問題,活IIS服務器上的錯誤沒有顯示自定義錯誤頁面(返回正確的HttpStatusCodes),但它是WAS在本地IIS上工作(本地主機地址使用默認網站 - 而不是卡西尼)。他們應該工作完全一樣,我會想 - 無論如何這個web.config設置修復它。

<configuration> 
    <system.webServer> 
     <httpErrors existingResponse="PassThrough"></httpErrors> 
    </system.webServer> 
</configuration> 

請注意,我的設置使用的Application_Error Global.asax中,只是這個其他的web.config設置:

<customErrors mode="On"> 
    <!-- There is custom handling of errors in Global.asax --> 
</customErrors> 
相關問題