我尝试添加新标头的内容:
request.Headers.GetType().InvokeMember("ChangeInternal",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
Type.DefaultBinder, request.Headers, new object[] { "Connection", "keep-alive" }
);
实际上,它keep-alive
在Connection中添加了标头,但并没有取代旧的标头。这样我就知道了Connection: Keep-Alive,keep-alive
。
我尝试了反射实验,但没有任何效果。
关于此还有其他类似的问题,但没有解决方案。
只需执行以下操作:
request.Headers.Remove("Connection");
request.Headers.Add("Connection", "keep-alive");
不需要通过反射设置这些标头。首先,删除旧条目很重要,因为Add
如果键已经存在,则调用添加另一个值(使用逗号分隔的值所看到的结果)。
最好使用HttpRequestHeader枚举而不是标头名称作为字符串:
request.Headers.Remove(HttpRequestHeader.Connection);
request.Headers.Add(HttpRequestHeader.Connection, "keep-alive");
我的错。Connection
在这种情况下,必须使用请求对象上的显式属性:
request.Connection = "keep-alive";
仅供参考:还有更多标头必须通过其显式属性进行设置。有关列表,请参见此页面的部分说明:https : //msdn.microsoft.com/zh-cn/library/System.Net.HttpWebRequest%28v=vs.110%29.aspx
好了,查看connection属性的源代码,您可以看到它限制了设置这些值:
bool fKeepAlive = text.IndexOf("keep-alive") != -1;
bool fClose = text.IndexOf("close") != -1;
if (fKeepAlive || fClose)
{
throw new ArgumentException(SR.GetString("net_connarg"), "value");
}
因此,您有2个选择:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句