我在Global.asax.cs中使用以下代码来记录未处理的错误并将用户转移到其中一个错误页面。错误页面被实现为标准的MVC控制器/视图。
protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = HttpContext.Current.Server.GetLastError();
//Handle errors
var httpException = ex as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "Index";
routeData.Values["exception"] = ex;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "Http403";
break;
case 404:
routeData.Values["action"] = "Http404";
log.Error("Error 404 - User sees page not found page", ex);
break;
}
}
log.Fatal("USER SEES ERROR 500 PAGE", ex);
IController errorsController = new errorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
它在开发机器(Windows 7 Pro)上运行良好。但是,当我将站点迁移到Windows Server 2008 R2时,错误页面停止显示。相反,我看到的是标准的IIS错误页面。然而,错误被正确记录。
我做错了什么?谢谢你!
确保您已经从Global.asax
中删除了HandleErrorAttribute
的全局属性注册。或者如果你正在使用ASP。. NET MVC 2从控制器中删除[HandleError]
属性。还可以尝试将errorMode
设置为detail:
<system.webServer>
<httpErrors errorMode="Detailed" />
</system.webServer>