我因试图对 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
在某些情况下(例如,如果我们收到 JSON 响应Accept: application/json
),但 IIS7 不允许我这样做。没有机会。
那么我到底该怎么办呢?我尝试过设置HttpResponse.TrySkipIisCustomErrors Property http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx,但这看起来像是一个巨大的黑客攻击,而且似乎并不能始终如一地工作。将此属性设置为 true 真的是获得我想要的行为的推荐最佳实践吗?
此刻我的感受就是对IIS7的强烈厌恶。任何人都可以通过证明我只是愚蠢并且我确实可以完全控制 HTTP 堆栈来帮助我解决这个问题吗?
看看以下内容:IIS7 在设置 Response.StatusCode 时覆盖 customErrors? https://stackoverflow.com/questions/434272/iis7-overrides-customerrors-when-setting-response-statuscode.
你需要设置
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)