问题
Good day!
I use strategy to handle 404 errors like this: Error handling for ASP.NET MVC 2 and IIS 7.0 or this: How can I properly handle 404 in ASP.NET MVC?
In short: I handle 404 as exception in Global.asax
without adding any routing rules, if the exception is 404 I render special controller\action with error message.
On IIS6 it works with ASP.NET wildcard mapping. On IIS7 in integrated mode I need to add the following to the Web.config
(where /error/HttpError404
is my action with 404 page):
<httpErrors>
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/error/HttpError404" responseMode="ExecuteURL" />
<error statusCode="403" prefixLanguageFilePath="" path="/error/HttpError403" responseMode="ExecuteURL" />
</httpErrors>
Why? Routing works differently on IIS integrated mode and IIS6 wildcard mapping?
Thanks in advance!
UPDATE: According to my tests it seems that my error handling works and my 404 action is rendered, but it seems that IIS sees 404 response code (which I set programmatically in my 404 action) and replace my page with default errors.
When I set <httpErrors>
I got two hits for 404 page: one from exception handling in Global.asax
and one from IIS.
Can this be the cause?
回答1:
It seems I have fixed it by setting in Web.config
:
<httpErrors existingResponse="PassThrough" />
来源:https://stackoverflow.com/questions/3554844/asp-net-mvc-404-handling-and-iis7-httperrors