我尝试稍微修复 MVC 的错误处理,并从这里实现 Marco 的解决方案:
ASP.NET MVC 404 Error Handling
这在我的 Win7 工作站上完美运行。但由于某种原因它无法在服务器上运行。 某些错误可以正常工作,但例如,如果我调用不存在的 Controller 和路由,我会得到标准 IIS 404 页面。
我已经放入了一些日志,并且 Error404Controller 被调用并执行,但由于某种原因,处理并未停止,并且随后加载了 IIS 404 错误页面。
这是我的 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));
}
}
这是 Controller :
[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.TrySkipIisCustomErrors = true; 告诉 IIS7 忽略自定义错误页面。这将禁用该响应的 IIS 自定义错误页面,如 the msdn 所示。 .
因此您的 Application_EndRequest 可能如下所示:
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));
}
}
关于asp.net-mvc - 404 MVC 错误 Controller 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26043737/