这个问题一直很头疼。前面提到的任何建议都没有单独为我解决,所以我将我的解决方案包括在内。作为记录,我们的环境/平台使用:
- .NET 框架 4
- MVC 3
- IIS8(工作站)和 IIS7(网络服务器)
具体来说,我试图获得一个 HTTP 404 响应,它将用户重定向到我们的自定义 404 页面(通过 Web.config 设置)。
首先,我的代码必须抛出一个HttpException
. 从控制器返回 aNotFoundResult
并没有达到我想要的结果。
throw new HttpException(404, "There is no class with that subject");
然后我必须在 Web.config 中配置和节点。customErrors
httpError
<customErrors mode="On" defaultRedirect="/classes/Error.aspx">
<error statusCode="404" redirect="/classes/404.html" />
</customErrors>
...
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL">
<clear />
<error statusCode="404" path="/classes/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
请注意,我留下了existingResponse
as Auto
,这与 @sefl 提供的解决方案不同。
这些customErrors
设置似乎对于处理我的显式抛出是必要的HttpException
,而httpErrors
节点处理的 URL 超出了 Globals.asax.cs 中指定的路由模式。
PS有了这些设置我不需要设置Response.TrySkipIisCustomErrors