添加双重HTTP头

4
我希望为我的响应添加httpHeader 我考虑使用以下代码:
private void AddCustomHeader()
         {
             if (string.IsNullOrEmpty(HttpContext.Response.Headers.Get("Access-Control-Allow-Origin")))
             {
                 // Custom header
                 HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
             }
         }

但是,当使用VS_server运行时,它在本地主机上总是失败。

This operation requires IIS integrated pipeline mode.

如果我添加一个已经存在的头信息,会发生什么?
HttpContext.Response.AddHeader("name","value");

HttpContext.Response 是什么?据我所知应该是 HttpContext.Current.Response。 - Antonio Bakula
你是否尝试过使用以下代码: HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Origin", "*"); - jbl
@jbl 那会怎么帮助呢? - Elad Benda
@AntonioBakula,那有什么区别? - Elad Benda
“header doesn't exist” 是什么意思?自定义头吗?不会抛出任何异常。你可以设置(几乎)任何你想要的东西。顺便说一句,这对于自定义头信息应该有所帮助:https://dev59.com/AGUp5IYBdhLWcg3wzp1k#15043027 - jbl
显示剩余3条评论
2个回答

4

我认为(总结评论),你应该尝试使用:

 HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Origin", "*");

关于第一个问题,它将替换相应标头的任何现有值。

Response.AddHeader只是为了保持与以前版本的兼容性。

关于您收到的异常,您应该尝试打开您的Web项目属性,“Web” =>勾选“使用本地IIS Web服务器”(而不是“使用VS开发服务器”)。

根据您的配置,您可能需要检查“使用IIS Express”。

此外,这对自定义标头应该有所帮助:https://dev59.com/AGUp5IYBdhLWcg3wzp1k#15043027


@Iain你应该发布自己的问题并附上完整的上下文。 - jbl

-1

关于“此操作需要IIS集成管道模式”错误:

  1. 在IIS管理器中选择应用程序池
  2. 点击“基本设置…”
  3. 确保对话框中“托管管道模式”的选项为“集成”模式

来源

关于您的第二个问题(如果添加一个已经存在的标头会发生什么),它只会添加另一个具有相同名称的值:

HttpContext.Response.AddHeader("name", "value1");
HttpContext.Response.AddHeader("name", "value2");

将导致一个带有名称为 name 和值为 value1, value2 的标题(在 ASP.NET 4.5、IIS Express 中尝试,尽管我怀疑这并不重要)。


@DanielLiuzzi 我知道如何配置IIS,我是在问关于Visual Studio本地服务器的问题。 - Elad Benda
根据这里所述,Response.Headers在Cassini或IIS 6中不受支持。 - Daniel Liuzzi
在IIS Express 8中,在Application_BeginRequest中,如果我添加HttpContext.Current.Response.AddHeader("name", "value1"); HttpContext.Current.Response.AddHeader("name", "value2");,由于某种原因,我会得到两个标头name: value1name: value2,而不是一个name: value1, value2 - JustAMartin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接