在IIS中,existingResponse ="PassThrough"是什么意思?

And*_*kin 31 asp.net iis web-config

文件说

existingResponse="PassThrough"

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

但是,"现有的反应是否存在"意味着什么呢?

例如,我希望我的customErrors处理程序抑制ASP.NET响应,以便IIS认为响应不存在.我该怎么办?

Pet*_*orf 46

模式中有三个可能的值:

<attribute name="existingResponse" type="enum" defaultValue="Auto">
  <enum name="Auto" value="0" />
  <enum name="Replace" value="1" />
  <enum name="PassThrough" value="2" />
</attribute>
Run Code Online (Sandbox Code Playgroud)

粗略地说,这就是我对此的理解:

PassThrough - 只要存在响应,就会单独保留现有响应.您的应用程序逻辑可能不会返回任何内容.在这种情况下,使用此处定义的错误页面.

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

Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)

如果您已经这样做,则使用代码的响应.

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

最后一个选项似乎是你想要的选项.


编辑:

考虑:

existingResponse="PassThrough"
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

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

改为:

existingResponse="Auto"
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

                .html-404   .aspx-404   .aspx-500
--------------------------------------------------
Auto             IIS         asp.net    asp.net
PassThrough      -           asp.net    asp.net
Replace          IIS         IIS        IIS
Run Code Online (Sandbox Code Playgroud)