gpt4 book ai didi

c# - 建立 httpheader 连接 : Keep-Alive into lower-case "keep-alive"

转载 作者:行者123 更新时间:2023-11-30 22:00:49 26 4
gpt4 key购买 nike

我尝试添加新标题的方法:

request.Headers.GetType().InvokeMember("ChangeInternal",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
Type.DefaultBinder, request.Headers, new object[] { "Connection", "keep-alive" }
);

实际上它在 Connection 中添加了 keep-alive header ,但它并没有替换旧的 header 。所以我得到 Connection: Keep-Alive,keep-alive

我尝试使用反射进行试验,但没有任何效果。

还有其他类似的问题,但没有解决。

最佳答案

只需执行以下操作:

request.Headers.Remove("Connection");
request.Headers.Add("Connection", "keep-alive");

不必通过反射设置这些 header 。首先,删除旧条目很重要,因为如果键已经存在,调用 Add 会添加另一个值(您看到的结果是用逗号分隔的值)。

使用 HttpRequestHeader 枚举代替 header 名称作为字符串会更好:

request.Headers.Remove(HttpRequestHeader.Connection);
request.Headers.Add(HttpRequestHeader.Connection, "keep-alive");

编辑:

我的错。在这种情况下必须使用请求对象上的显式 Connection 属性:

request.Connection = "keep-alive";

仅供引用:还有一些 header 必须通过其显式属性进行设置。有关列表,请参阅此页面的备注部分:https://msdn.microsoft.com/en-us/library/System.Net.HttpWebRequest%28v=vs.110%29.aspx

编辑2:

嗯,看the connection property's source code ,您可以看到它限制设置这些值:

bool fKeepAlive = text.IndexOf("keep-alive") != -1;
bool fClose = text.IndexOf("close") != -1;
if (fKeepAlive || fClose)
{
throw new ArgumentException(SR.GetString("net_connarg"), "value");
}

所以你有两个选择:

  1. 坚持使用大写值(我更喜欢),因为无论如何你没有真正的理由将其设置为小写(“所以我希望标题与例如我的 firefox 浏览器。”)。正如 Darin Dimitrov 已经指出的那样, header 无论如何都不应该区分大小写。
  2. 以这种方式扩展您的反射方法,您首先删除 header ,然后再次将其设置为小写。

关于c# - 建立 httpheader 连接 : Keep-Alive into lower-case "keep-alive",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com