首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同的Http 404 -从控制器返回

不同的Http 404 -从控制器返回
EN

Stack Overflow用户
提问于 2014-07-09 18:22:42
回答 1查看 151关注 0票数 2

我有一个MVC ASP.NET网站,其中我在web.config上有以下内容

代码语言:javascript
运行
复制
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
  <error statusCode="404" redirect="~/redir/Home/Http404" />
</customErrors>

因此,当我试图导航到不存在的地址时,我的Http404视图位于Home下面,这是正确的。

现在我有了一个特殊的情况,我想手动返回相同的Http404,我看到的是IIS8错误,而不是我的Http404视图。

控制器:

代码语言:javascript
运行
复制
return new HttpNotFoundResult();

如何避免此IIS8错误页,并使我的视图仍然是错误提供程序?

编辑*

我发现,如果不使用HttpNotFoundResult(),而是使用旧的throw new HttpException(404, "HTTP/1.1 404 Not Found");,它就能工作。

为什么会有这种区别?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-10 07:10:10

<customErrors>部分旨在控制应用程序错误发生时的行为。这也是为什么在<system.web>部分下定义它的原因。

当显式抛出HttpException (或发生任何其他内部异常时),将使用<customErrors>设置,因为它被视为(正确地)应用程序错误。

另一方面,当您只是return HttpNotFoundResult()时,没有引发应用程序错误(在内部,它只是将HTTP代码和消息设置为404),MvcHandler将把请求交给管道中的下一个处理程序。因此,最终您将得到一个常规的服务器错误,它与任何其他'404未找到‘请求一样由IIS处理,而<customErrors>部分不影响它的行为。

因此,当出现常规服务器错误时,需要控制IIS行为。要做到这一点,请按以下方式使用<system.webServer/httpErrors>部分:

代码语言:javascript
运行
复制
<system.webServer>
  <httpErrors errorMode="Custom">
    <remove statusCode="404"/>
    <error statusCode="404" path="/redir/Home/Http404" responseMode="ExecuteURL" />
  </httpErrors>
</system.webServer>

请参阅文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24661150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档