Asp.net mvc 404错误气泡通过MVC错误控制器
我已经尝试修复了一点MVC的错误处理,并从这里实现了Marco的解决方案:Asp.net mvc 404错误气泡通过MVC错误控制器,asp.net-mvc,error-handling,http-status-code-404,asp.net-mvc-routing,Asp.net Mvc,Error Handling,Http Status Code 404,Asp.net Mvc Routing,我已经尝试修复了一点MVC的错误处理,并从这里实现了Marco的解决方案: 这在我的Win7工作站上非常有效。但由于某些原因,它在服务器上不起作用。 某些错误可以正常工作,但例如,如果我调用一个不存在的控制器和路由,我会得到标准的IIS404页面 我已经输入了一些日志,并调用和执行了Error404Controller,但由于某些原因,处理没有停止,随后它会加载IIS 404错误页面 这是my global.asax中的代码 protected void Application_EndRequ
这在我的Win7工作站上非常有效。但由于某些原因,它在服务器上不起作用。 某些错误可以正常工作,但例如,如果我调用一个不存在的控制器和路由,我会得到标准的IIS404页面 我已经输入了一些日志,并调用和执行了Error404Controller,但由于某些原因,处理没有停止,随后它会加载IIS 404错误页面 这是my 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文件,没有发现差异。如果在IIS7中,您需要使用
Response.tryskipiiscustomerors=true告诉IIS7忽略自定义错误页代码>。这将根据禁用该响应的IIS自定义错误页
因此,您的应用程序请求可能如下所示:
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));
}
}
当您尝试不存在的控制器/操作时,是否记录了状态代码?当它到达这一点时,它肯定是404吗?(我想有时候我会得到blah没有实现IController-这将是一个代码500)不,我确实在应用程序中得到404响应代码,并且会调用Error404Controller,但我仍然会得到IIS 404错误页面,而不是我的。干杯!您必须将其添加到web.config中,然后它才能正常工作。