I've got customErrors set in my web.config
<customErrors mode="On" defaultRedirect="/Error/GeneralError">
<error statusCode="404" redirect="/Error/NotFound"/>
</customErrors>
This works fine locally. A 404 throws a 404. On the shared hosting it throws up the standard server 404 page unless I specific开发者_运维问答ally set 404 to point to /Error/NotFound. That's fine. Now it will show the custom 404 page except the response status code is 200. So if I try to throw Response.StatusCode = 404; in my NotFound action in ErrorController like this:
public class ErrorController : Controller
{
public ActionResult NotFound()
{
Response.StatusCode = 404;
return View();
}
}
the server throws a status code 500 Internal Server Error but my GeneralError page doesn't show, just a blank white page with no source.
I've tried many different combinations but I can't seem to find how to make it show my custom 404 page along with a 404 response.
Any ideas?
I found out some interesting information here: http://blog.angrypets.com/2008/03/responsetryskip.html
Response.TrySkipIisCustomErrors = true;
Setting TrySkipIisCustomErrors
to true
after the Response.StatusCode = 404;
takes care of the issue.
Don't use a customErrors
element (except to turn mode="On"
for local testing). Instead, add an Application_EndRequest
method to your MvcApplication
per Marco's Better-Than-Unicorns MVC 404 Answer.
精彩评论