IIS7和HTTP状态代码处理

时间:2011-04-29 15:09:58

标签: http iis-7 http-status-codes

我试图在IIS7(集成模式)中对错误的渲染进行完全的程序控制,因此我有一个硬核头痛。我想做的是给出错误(找不到页面,内部服务器错误,未经过身份验证等),将整个请求传输到自定义ASPX或HTML(我更喜欢后者)和正确的HTTP状态代码。

我想要的是IIS7没有给出我设置HTTP状态代码的废话。我不想要它的错误处理。当我设置Response.StatusCode = (int)HttpStatusCode.NotFound时,我想要的不是IIS来呈现自己的错误页面,而是可能将请求转移到另一个文件。

我已经让这个静态配置工作了:

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

虽然这有效但在给定错误情况下,它并没有让我以编程方式控制如何处理响应。配置是一个很好的后备,但我真的希望能够设置Response.StatusCode并在某些情况下呈现与配置的404.html完全不同的内容(如果我们收到{{1},则会收到JSON响应}),但IIS7不会让我。没机会。

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

此刻,我留下的感觉只不过是对IIS7的强烈仇恨。任何人都可以通过证明我只是愚蠢而且我确实可以完全控制HTTP堆栈来帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:8)

请查看以下内容:IIS7 Overrides customErrors when setting Response.StatusCode?

您需要设置

  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>