IIS7和HTTP状态码处理

这个问题张贴在堆栈溢出 ,我在这里交叉发布,因为我认为这可能是一个更正确的论坛。

我正在尝试通过在IIS7(集成模式)中呈现错误获得完整的程序控制来控制头部疼痛。 我想要做的是给出一个错误(页面未find,内部服务器错误,未经过身份validation等),将整个请求传输到一个自定义ASPX或HTML(我更喜欢后者)与正确的HTTP状态代码。

我想要的是IIS7不给我废话什么我设置HTTP状态代码。 我不想error handling。 当我设置Response.StatusCode = (int)HttpStatusCode.NotFound ,我想要的不是IIS来渲染自己的错误页面,但也许传输请求到另一个文件。

我已经得到这个静态configuration的东西工作:

 <configuration> <system.webServer> <httpErrors> <clear /> <error statusCode="404" path="/errors/404.html" responseMode="ExecuteURL" /> </httpErrors> </system.webServer> </configuration> 

虽然这有效,但如果出现错误情况,它不会给我程序控制如何处理响应。 configuration是一个很好的后备,但我真的想能够设置Response.StatusCode和呈现一些完全不同于configuration的404.html在某些情况下(如JSON响应,如果我们收到Accept: application/json ),但IIS7不会让我。 不是一个机会。

那么我该怎么做? 我试图设置HttpResponse.TrySkipIisCustomErrors Property ,但看起来像一个巨大的黑客,似乎并不一致。 是否将此属性设置为true真的是build议的最佳实践来获得我想要的行为?

目前,我留下的感觉只不过是对IIS7的强烈憎恨。 任何人都可以帮助我通过certificate我只是愚蠢的,我确实可以完全控制HTTP堆栈来补救这个问题吗?

完成这个的方法是在%windir%\ system32 \ inetsrv \ applicationHost.config中设置您的部分,以便找不到的页面由您的基本页面处理程序工厂处理。 如果您查看.aspx的处理程序,只需将其复制并设置为通配符文件处理程序。

我相信它会是这样的:

 <add name="Catch-all" path="*" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" /> 

请覆盖底部的StaticFile规则。