Asp.net mvc 3 发生任何错误时,将调用两次应用程序_Error()(发生未经处理的异常)
每当发生错误时,我的C.net mvc应用程序_错误将被调用两次 应用程序错误代码为:Asp.net mvc 3 发生任何错误时,将调用两次应用程序_Error()(发生未经处理的异常),asp.net-mvc-3,exception-handling,Asp.net Mvc 3,Exception Handling,每当发生错误时,我的C.net mvc应用程序_错误将被调用两次 应用程序错误代码为: protected void Application_Error(object sender, EventArgs e) { var httpContext = ((MvcApplication)sender).Context; //var currentController = " ";
protected void Application_Error(object sender, EventArgs e)
{
var httpContext = ((MvcApplication)sender).Context;
//var currentController = " ";
//var currentAction = " ";
string currentController;
string currentAction;
var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
currentController = "";
currentAction = "";
if (currentRouteData != null)
{
if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
{
currentController = currentRouteData.Values["controller"].ToString();
}
if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
{
currentAction = currentRouteData.Values["action"].ToString();
}
}
var ex = Server.GetLastError();
var controller = new ErrorController();
var routeData = new RouteData();
var action = "Error";
if (ex is HttpException)
{
var httpEx = ex as HttpException;
switch (httpEx.GetHttpCode())
{
case 400:
action = "BadRequest";
break;
case 401:
action = "Unauthorized";
break;
case 403:
action = "Forbidden";
break;
case 404:
action = "NotFound";
break;
case 408:
action = "RequestTimeout";
break;
case 500:
action = "InternalServerError";
break;
case 502:
action = "BadGateway";
break;
case 503:
action = "ServiceUnavailable";
break;
case 504:
action = "GatewayTimeout";
break;
}
}
httpContext.ClearError();
httpContext.Response.Clear();
httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
httpContext.Response.TrySkipIisCustomErrors = true;
routeData.Values["controller"] = "Error";
routeData.Values["action"] = action;
controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
}
我猜您的浏览器正在向错误页面上的/favicon.ico文件发送一个自动请求,您忘记在应用程序中包含该图标,404再次触发应用程序错误事件。通过在Application_Error方法中放置断点并分析以下值,可以查看有关请求的更多详细信息:
httpContext.Request.Url.AbsoluteUri
我放了我的2美分,你会看到类似的东西http://localhost:1234/favicon.ico.我猜您的浏览器正在向错误页面上的/favicon.ico文件发送一个自动请求,您忘记在应用程序中包含该图标,404再次触发应用程序错误事件。通过在Application_Error方法中放置断点并分析以下值,可以查看有关请求的更多详细信息:
httpContext.Request.Url.AbsoluteUri
我放了我的2美分,你会看到类似的东西http://localhost:1234/favicon.ico.