我想处理的Global.asax内的所有应用程序异常为MVC 3项目,而一切都正确内卡西尼当我部署到IIS 7.5工作,IIS开始采取控制从我的应用程序,距离处理许多例外本身。 这有绕过我的自定义日志记录,并返回丑意见的后果。
我有一个类似的方法来Darin的回答到这个问题 。 下面是我使用的时刻是什么。
protected void Application_Error(object sender, EventArgs e)
{
var app = (MvcApplication)sender;
var context = app.Context;
var exception = app.Server.GetLastError();
LogExceptionDetails(exception, Request.Url.PathAndQuery);
context.Response.Clear();
context.ClearError();
string redirectTo = "/error";
HttpException httpException = exception as HttpException;
if (httpException != null)
{
switch (httpException.GetHttpCode())
{
case 403:
redirectTo += "/forbidden";
break;
case 404:
redirectTo += "/notfound";
break;
}
}
Response.TrySkipIisCustomErrors = true;
// I should really change this so I can return a proper statusCode
Response.Redirect(redirectTo);
}
作为一个实例,导航到localhost/app_code
将返回一个难看视图和将不被记录。 我已成功地至少使IIS使用回到我的自定义视图:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="403" />
<error statusCode="403" path="/error/forbidden" responseMode="ExecuteURL" />
<remove statusCode="404" />
<error statusCode="404" path="/error/notfound" responseMode="ExecuteURL" />
</httpErrors>
这可能没有什么解决日志问题。
我试过其他的事情包括:
- 设置
existingResponse="PassThrough"
。 - 使用
<clear />
- 的各种组合
httpErrors
有和无customErrors
。 - 设置
<modules runAllManagedModulesForAllRequests="true" />
-
Response.TrySkipIisCustomErrors = true;
有没有一种方法以编程方式处理这个问题,同时保持东西Global.asax的集中,而不是在web.config乱搞?