How do I stop IIS7 from putting out its own 404 before my MVC app gets a chance to handle it?

后端 未结 5 1581
情书的邮戳
情书的邮戳 2021-01-01 23:19

I have an ASP.NET MVC 2 application, which has an Application_Error event handler in global.asax. In this, I\'m detecting the case where the Exception type is HttpException

相关标签:
5条回答
  • 2021-01-01 23:35

    Can't you just turn off the 404 httpError:

        <httpErrors errorMode="Custom">
            <remove statusCode="404" subStatusCode="-1" />
        </httpErrors>
    
    0 讨论(0)
  • 2021-01-01 23:36

    This is discussed in the MVC overview tutorials. It is probably the the case that your IIS 7 is set up in Classic mode. See:

    Using ASP.NET MVC with Different Versions of IIS (C#)

    0 讨论(0)
  • 2021-01-01 23:45

    I answered that in another post: ASP.NET Application hosted on IIS7 that is ignoring custom errors and falls back to IIS errors

    "To disable the IIS error messages you have to set

      Response.TrySkipIisCustomErrors = true;
    

    in your error page. After that, your Error messages should show without problem."

    0 讨论(0)
  • 2021-01-01 23:56

    In ASP.NET MVC I use a custom ErrorController with an Index method (default handler) and a few custom handlers (401, 404) using the following web.config settings

    <!--  CUSTOM ERROR MESSAGES
    Set customErrors mode="On" or "RemoteOnly" to enable custom error messages, "Off" to disable. 
    Add <error> tags for each of the errors you want to handle.   
    "On" Always display custom (friendly) messages.
    "Off" Always display detailed ASP.NET error information.
    "RemoteOnly" Display custom (friendly) messages only to users not running 
    on the local Web server. This setting is recommended for security purposes, so 
    that you do not display application detail information to remote clients. -->
    <customErrors mode="Off" defaultRedirect="~/Error">
        <error statusCode="401" redirect="~/Error/Unauthorized" />
        <error statusCode="404" redirect="~/Error/NotFound" />
    </customErrors>
    

    I don't use Application_Error except for logging purposes.

    0 讨论(0)
  • 2021-01-01 23:58

    The Answer by Flynn solved my issue of ASP.NET taking control of the 404

    Now I am able to do this:

    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = 404;
    Response.Write("<script type='text/javascript'>setTimeout(function () { window.location = '/'; }, 1000)</script>");
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    
    0 讨论(0)
提交回复
热议问题