我试图在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堆栈来帮助我解决这个问题吗?
答案 0 :(得分:8)
请查看以下内容:IIS7 Overrides customErrors when setting Response.StatusCode?。
您需要设置
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>