gpt4 book ai didi

asp.net-mvc - 404错误气泡通过MVC错误 Controller

转载 作者:行者123 更新时间:2023-12-03 07:42:08 26 4
gpt4 key购买 nike

我尝试了一些针对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忽略自定义错误页面。根据the msdn,这将禁用该响应的IIS自定义错误页面。

因此,您的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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com