给定以下 System.Net.Http.HttpClient
Portable Class Library
引发异常:
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("Authorization", "aaaa,bbbb");
异常(exception)情况是:格式无效
at System.Net.Http.Headers.HttpHeaders.AddInternal (System.String name, IEnumerable
1 values, System.Net.Http.Headers.HeaderInfo headerInfo, Boolean ignoreInvalid) [0x0004c] in /Developer/MonoTouch/Source/mono/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs:195 at System.Net.Http.Headers.HttpHeaders.Add (System.String name, IEnumerable
1 values) [0x00011] in /Developer/MonoTouch/Source/mono/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs:170 at System.Net.Http.Headers.HttpHeaders.Add (System.String name, System.String value) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders < ... snip ...>
现在这只发生在下面
header key = 授权
。如果您将其更改为其他任何内容,则可以。
Value = 中必须有一个逗号。
现在,这个之前的 SO 问题表明逗号是在 header 中粘贴多个值的正确方法。
谁能解释一下这是怎么回事?
注意:这是在 Xamarin 上进行的,所以我猜它是单声道的。不确定这是否重要。
更新:
这是它的照片。
最佳答案
根据 this links spec rfc2617,用逗号分隔似乎有效。
“它使用可扩展的、不区分大小写的 token 来标识身份验证方案, 后跟逗号分隔的属性值对列表 通过它携带实现身份验证所需的参数 计划。”
但它表明你很可能设置不正确,它们必须是“属性值对”的形式:
auth-param = token "=" ( token | quoted-string )
你究竟是如何设置它们的?
httpClient.DefaultRequestHeaders.Add("Authorization", "aaaa,bbbb");
以上看似无效,它们不是属性对“aaaa,bbbb”。您尝试设置的任一属性都没有 = 号。
尝试以下作为测试:
httpClient.DefaultRequestHeaders.Add("Authorization", "aaaa=1234,bbbb=45678");
关于c# - System.Net.Http.HttpClient 实例在设置逗号时抛出异常。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824775/