我已经创建了一个演示用于在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/sdsdsd/asdsadasd/dasdsad
http://localhost:14360/search/fdsfdf/dsads/fe
答案 0 :(得分:1)
您面临的问题归结为以下事实:某些错误由ASP.NET处理,而其他错误由IIS处理。您可以阅读有关该主题here的更多信息。
我建议您创建一个.collect
,该ErrorsController
处理最常见的应用程序错误并返回相应的视图。此外,您必须将Web.config
(或Web.Release.config
)文件配置为使用新创建的控制器,并且可能还必须替换IIS的默认错误页面(对我来说,它们位于InetPub\custerr\en-US\
目录。
控制器 (ErrorsController.cs)
public class ErrorsController : Controller
{
// GET: Errors/Unauthorized
public ActionResult Unauthorized()
{
return new HttpStatusCodeResult(401);
}
// GET: Errors/Forbidden
public ActionResult Forbidden()
{
return new HttpStatusCodeResult(403);
}
// Additional Errors
}
配置文件 (Web.Release.config)
<customErrors defaultRedirect="~/" mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="401" redirect="~/Errors/Unauthorized"/>
<error statusCode="403" redirect="~/Errors/Forbidden"/>
<!-- Additional Errors -->
</customErrors>
答案 1 :(得分:1)
默认/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/fdsfdf
或http://localhost:14360/search/fdsfdf/1234
将获得httpStatusCode 200,但是http://localhost:14360/search/fdsfdf/dsads/fe
是未定义的URL,asp.net将向浏览器返回404
如果您需要自定义错误页面,请尝试添加httpErrors
和customErrors
处理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>