asp.net-mvc - 404 MVC 错误 Controller 出现错误

标签 asp.net-mvc error-handling http-status-code-404 asp.net-mvc-routing

我尝试稍微修复 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/

相关文章:

c# - ASP.NET MVC ActionResult View() 不改变 url

asp.net - 从页面内识别 404 来源

java - Java中如何处理异常而不必回到try block 的开头?

error-handling - 通过依赖关系管理多个Pod的健康状况

reactjs - React 嵌套路由刷新时无法加载

asp.net - 如何创建 404 图像?对于 ASP.NET 无法读取的图像

asp.net-mvc - JSON 与 JSONP 与 CORS

javascript - 从 ASP.NET View 调用 C# 函数

javascript - 动态创建( Bootstrap )html 表格行 - 单击事件不会触发

php - 捕获未知的命名参数错误