Pal*_*alo 5 c# user-agent websocket http-headers .net-4.5
使用的明显答案会ClientWebSocket.SetHeader引发异常,因为它是受保护的标头:
System.ArgumentException occurred
Message=The 'User-Agent' header must be modified using the appropriate property or method.
Parameter name: name
ParamName=name
StackTrace:
at System.Net.WebHeaderCollection.ThrowOnRestrictedHeader(String headerName)
异常字符串建议在ClientWebSocket自身上使用属性/方法,但我找不到任何此类属性/方法.似乎这个例外是为HttpWebRequest类而设计的,它实际上具有这样的属性.
代码,不起作用:
ClientWebSocket socket = new ClientWebSocket();
// Will throw
socket.Options.SetRequestHeader("User-Agent", "SomeUserAgentString");
// Will throw
socket.Options.SetRequestHeader("Referer", "SomeReferer"]);
Run Code Online (Sandbox Code Playgroud)
看起来你不能设置这些属性,至少现在不行.你也许可以通过反思来做到这一点.
如果你仔细观察堆栈跟踪,你会发现抛出方法是System.Net.WebHeaderCollection.ThrowOnRestrictedHeader.System.Net.WebHeaderCollection是一个专门的名称值集合,旨在处理HTTP标头.如果你看一下备注部分,你会看到以下内容:
某些常见标头被视为受限制,并且由API直接公开(例如Content-Type)或受系统保护且无法更改.
该列表将两个User-Agent和Referer属性列为受保护的标头,因为ClientWebSocket不公开它所以无法设置.
所有这一切是说,不过,如果你绝对需要设置的头,你需要找到私有引用WebHeaderCollection您的ClientWebSocketOptions(公开为Options你的财产ClientWebSocket),并调用受保护的AddWithoutValidate方法来设置标题.