首页 > 解决方案 > 如何显示自定义 404 错误页面

问题描述

我创建了一个演示,用于在 MVC 5 中显示我们的自定义错误页面。我在输入两个斜杠时成功,但是当我输入两个以上的斜杠时,我没有得到我的自定义错误页面,而是如图所示的 MVC 错误以下。

HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。

这就是我的Web.config文件的样子。

<customErrors mode="On" defaultRedirect="~/Error">
    <error redirect="~/Error/NotFound" statusCode="404" />
    <error redirect="~/Error/Forbidden" statusCode="403" />
</customErrors>

这是我的ErrorController

public ViewResult NotFound()
{
    return View();
}

当我输入下面的 URL 时,我当前的设置工作正常。

http://localhost:14360/search/fdsfdf

但是当输入以下 URL 之一时,我的自定义错误页面不会显示。

http://localhost:14360/search/fdsfdf/sdsdsd/asdsadasd/dasdsad
http://localhost:14360/search/fdsfdf/dsads/fe

标签: c#asp.net-mvcasp.net-mvc-5

解决方案


默认/App_Start/RouteConfig.cs

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

所以你输入http://localhost:14360/search/fdsfdfhttp://localhost:14360/search/fdsfdf/1234将得到httpStatusCode 200,但http://localhost:14360/search/fdsfdf/dsads/fe未定义url,如果你需要自定义错误页面,asp.net将向浏览器返回404,尝试添加httpErrorscustomErrors处理httpStatusCode 404

<system.webServer>
    <httpErrors existingResponse="Auto" errorMode="Custom" defaultResponseMode="File">
        <remove statusCode="404" subStatusCode="-1"/>
        <error statusCode="404" path="/Error/404" responseMode="Redirect" />
    </httpErrors>
</system.webServer>

<system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error/Index">
        <error redirect="~/Error/404" statusCode="404" />
    </customErrors>
</system.web>

推荐阅读