Asp.net MVC web.config中的客户错误

时间:2017-07-18 09:21:13

标签: c# asp.net-mvc http-status-code-404

在我的MVC Web应用程序中,我需要一个404页面来解决所有错误。我编辑了web.config文件,其中包含以下行:

<customErrors mode="On">
  <error redirect="/error/404" statusCode="404" /> 
</customErros>

它工作,但在浏览器网址中我看到了网址/错误/ 404。我怎么看到被叫URL?

感谢。

2 个答案:

答案 0 :(得分:0)

customErrors节点实际上早于httpErrors,请尝试使用此节点。确保web.config中的这些节点作为system.webServer节点的子节点:

<httpErrors>
  <error statusCode="404" path="/error/404" responseMode="ExecuteURL" />
</httpErrors>

或者,您可以使用customErrors以两种方式执行此操作: 首先是修改单个error节点,第二个是更改customErrors节点。我不记得其中一个现在已经过时了,但是可以随意尝试这两个。

<error statusCode="404" path="/error/404" responseMode="ExecuteURL"/>

<customErrors mode="On" redirectMode="ResponseRewrite">

如果上述情况不起作用,其他事情就会发生。你检查过IIS日志吗?

<强>链接

httpErrors Documentation

Custom Errors Element documentation (已存档)

答案 1 :(得分:0)

我在global.asax中使用Application_error部分解决。我添加了这个方法

    protected void Application_Error(object sender, EventArgs e)
    {
        var exception = Server.GetLastError();
        var httpException = exception as HttpException;
        if (httpException != null && httpException.GetHttpCode() == 404)
        {
            Response.Clear();
            Server.ClearError();
            Response.TrySkipIisCustomErrors = true;

            IController controller = new CommonController();

            var routeData = new RouteData();
            routeData.Values.Add("controller", "Common");
            routeData.Values.Add("action", "PageNotFound");

            var requestContext = new RequestContext(
                 new HttpContextWrapper(Context), routeData);
            controller.Execute(requestContext);

        }
       }

这项工作很好。问题来自控制器:.i.e。如果我没有找到db记录,我想在默认错误页面返回404错误。我还想在浏览器中显示原始名为url的内容,而不是重定向网址。使用return View();在控制器中,这不会发生。我怎么解决呢?感谢。