C# 不同的Http 404-从控制器返回
我有一个MVC ASP.NET网站,我在C# 不同的Http 404-从控制器返回,c#,asp.net-mvc,http,web-config,C#,Asp.net Mvc,Http,Web Config,我有一个MVC ASP.NET网站,我在web.config <customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> <error statusCode="404" redirect="~/redir/Home/Http404" /> </customErrors> 如何避免这个IIS8错误页面,并且仍然使我的视图成为错误提供程序 编辑* 我发现如果使用旧的抛出新的Ht
web.config
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
<error statusCode="404" redirect="~/redir/Home/Http404" />
</customErrors>
如何避免这个IIS8错误页面,并且仍然使我的视图成为错误提供程序
编辑*
我发现如果使用旧的抛出新的HttpException(404,“HTTP/1.1 404未找到”),而不是HttpNotFoundResult()代码>它可以工作
为什么会有这种差异
感谢当出现应用程序错误时,
部分旨在控制行为。这也是在
部分中定义它的原因
当您显式抛出HttpException
(或发生任何其他内部异常时),
设置将被用作(正确地)应用程序错误
另一方面,当您简单地返回HttpNotFoundResult()
时,不会抛出任何应用程序错误(在内部,它只是将HTTP响应状态代码和消息设置为404),并且MvcHandler
会将请求移交给管道中的下一个处理程序。因此,最终会出现一个常规的服务器错误,该错误与任何其他“404未找到”请求一样由IIS处理,
部分不会影响其行为
因此,当发生常规服务器错误时,您需要控制IIS行为。为此,请按如下方式使用
部分:
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="/redir/Home/Http404" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
请参见您是否注册了全局HandleError
筛选器?是的,我有筛选器。添加(新HandleErrorAttribute())代码>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="/redir/Home/Http404" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>