Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同的Http 404-从控制器返回_C#_Asp.net Mvc_Http_Web Config - Fatal编程技术网

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

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

我有一个MVC ASP.NET网站,我在
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>