我有一个MVC ASP.NET网站,其中我在web.config上有以下内容
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
<error statusCode="404" redirect="~/redir/Home/Http404" />
</customErrors>因此,当我试图导航到不存在的地址时,我的Http404视图位于Home下面,这是正确的。
现在我有了一个特殊的情况,我想手动返回相同的Http404,我看到的是IIS8错误,而不是我的Http404视图。
控制器:
return new HttpNotFoundResult();如何避免此IIS8错误页,并使我的视图仍然是错误提供程序?
编辑*
我发现,如果不使用HttpNotFoundResult(),而是使用旧的throw new HttpException(404, "HTTP/1.1 404 Not Found");,它就能工作。
为什么会有这种区别?
谢谢
发布于 2014-07-10 07:10:10
<customErrors>部分旨在控制应用程序错误发生时的行为。这也是为什么在<system.web>部分下定义它的原因。
当显式抛出HttpException (或发生任何其他内部异常时),将使用<customErrors>设置,因为它被视为(正确地)应用程序错误。
另一方面,当您只是return HttpNotFoundResult()时,没有引发应用程序错误(在内部,它只是将HTTP代码和消息设置为404),MvcHandler将把请求交给管道中的下一个处理程序。因此,最终您将得到一个常规的服务器错误,它与任何其他'404未找到‘请求一样由IIS处理,而<customErrors>部分不影响它的行为。
因此,当出现常规服务器错误时,需要控制IIS行为。要做到这一点,请按以下方式使用<system.webServer/httpErrors>部分:
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="/redir/Home/Http404" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>请参阅文档
https://stackoverflow.com/questions/24661150
复制相似问题