3

在我注意到我的代码可能在以经典模式设置的服务器上运行之前,我正在使用 Response.Header.Add()。在这种情况下,出现异常“此操作需要 IIS 集成管道模式”。被提出。

我切换到 Response.AddHeader() 来解决我的问题。此功能似乎较旧,但并未弃用。我想知道,您是否看到在 Response.AddHeader() 上使用 Response.Header.Add() 的任何理由?你能解释一下吗?

4

1 回答 1

9

Response.AddHeader() 是一种较旧的方法,面向 IIS6。Response.AddHeader 为您提供了一种将自定义标头添加到 Response Headers 集合的基本方法,但并未真正为您提供以其他方式操作集合的方法(例如,您无法从集合中删除标头 - 尽管您可以使用 Response.ClearHeaders()) 清除它们。Response.Header.Add() 较新,需要集成管道模式才能运行,仅在 IIS7 及更高版本中受支持...

“仅 IIS 7.0 集成管道模式和至少 .NET Framework 3.0 支持 Headers 属性。当您尝试访问 Headers 属性并且不满足这两个条件中的任何一个时,将引发 PlatformNotSupportedException。” -Linky

我的理解是 IIS6 使用 ASAPI 来调用 .Net,有效地限制了响应标头之类的东西的使用方式。借助 IIS7 集成模式,“将 ASP.NET 请求管道与 IIS 核心请求管道相结合的统一请求处理管道”,在请求/响应生命周期内提供更大的工作灵活性......

这里有几个链接可以帮助您阐明主题 -将 ASP.Net 应用程序从 IIS 6.0 移动到 IIS 7.0以及每个 ASP.NET 开发人员都应该知道的 IIS 管道中的 HTTP 请求生命周期事件

我希望这个对你有用!

于 2014-03-19T14:09:13.167 回答