2011-04-29 140 views
8

我在尝试获取对IIS7(集成模式)中的错误渲染的完整编程控制时感到头疼。我想要做的是给出一个错误(页面未找到,内部服务器错误,未经过身份验证等),将整个请求转移到自定义ASPX或HTML(我更喜欢后者)并使用正确的HTTP状态代码。IIS7和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完全不同的东西(如我们收到Accept: application/json时的JSON响应),但IIS7不会让我。没有机会。

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

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

+0

您是否尝试过使用一个HTTP处理程序,而不是一个静态的HTML页面? – sanpaco 2012-08-17 19:31:11

回答