现有的响应=" PassThrough"在IIS中意味着什么

时间:2015-06-25 03:22:50

标签: asp.net iis web-config

文档说

  

existingResponse="PassThrough"

     

如果存在现有响应,则保持响应不变。   http://www.iis.net/configreference/system.webserver/httperrors#005

但这意味着"现有的反应是否存在"?

E.g。我希望我的customErrors处理程序禁止ASP.NET响应,以便IIS认为响应不存在。我该怎么做?

1 个答案:

答案 0 :(得分:39)

架构中有三种可能的值:

<attribute name="existingResponse" type="enum" defaultValue="Auto">
  <enum name="Auto" value="0" />
  <enum name="Replace" value="1" />
  <enum name="PassThrough" value="2" />
</attribute>

粗略地说,这就是我理解这一点:

PassThrough - 只要有现有的响应就离开现有的响应。您的应用程序逻辑可能无法返回任何内容。在这种情况下,使用此处定义的错误页面。

自动 - 使用此节点中定义的IIS错误页面,除非您在asp.net中设置了:

Response.TrySkipIisCustomErrors = true;

如果您已完成此操作,则会使用您代码的响应。

替换 - 始终使用IIS错误页面,即使开发人员已设置TrySkipIisCustomErrors

最后一个选项似乎是您想要的选项。

修改

考虑:

existingResponse="PassThrough"

现在尝试打开一个不存在的asp.net页面,你会看到:

enter image description here

即使资源不存在,运行时也会提供响应,然后传递给浏览器。

现在,尝试打开一个不存在的html页面。这次我们仍然获得404状态但是空页。

更改为:

existingResponse="Auto"

缺少的asp.net页面仍显示asp.net错误页面,但是对于缺少的html页面,我们现在获得了IIS:

enter image description here

所以,总结一下:在查看缺少的html和aspx页面时有所不同 existingResponse值,我们会得到不同的错误页面:

                .html-404   .aspx-404   .aspx-500
--------------------------------------------------
Auto             IIS         asp.net    asp.net
PassThrough      -           asp.net    asp.net
Replace          IIS         IIS        IIS