【发布时间】:2014-05-08 07:07:58
【问题描述】:
我正在尝试使用 System.Net.HttpClient 类向 Google Cloud Messaging 发布消息。
Google Cloud Message 要求您包含名为“Authorization”的标头,格式类似于:
key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D
但是当我尝试这个时,HttpClient 类会抛出异常。
string keyString = "key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Foo", keyString); // <== Proving I can
client.DefaultRequestHeaders.Add("Authorization", keyString); // Exception thrown
异常类型为System.FormatException。消息是
值'key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w'的格式是 无效。
而调用栈是:
at System.Net.Http.Headers.HttpHeaderParser.ParseValue(String value, Object storeValue, Int32& index)
at System.Net.Http.Headers.HttpHeaders.ParseAndAddValue(String name, HeaderStoreItemInfo info, String value)
at System.Net.Http.Headers.HttpHeaders.Add(String name, String value)
如何在不引发异常的情况下将此标头放入此发布请求中?
顺便说一句,我使用 Fiddler 撰写了这样的帖子,并且它有效:
标题:
User-Agent: Fiddler
Authorization: key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D
Host: android.googleapis.com
Content-Length: 220
Content-Type: application/json
请求正文:
{
"registration_ids" : ["APA91bEM6XPdiZv5VgNNApakfyYfZwB871018Hljl1L27kaPvksasnR0bHlmcCZFxOSPD6bDLMZgvgfT9xsKnF6Tg0oSQM2cMM1KRbuK7cR7jICqAnSDYg_SvERTzPMT8puXGTlVkEVH6dsneBkXiBu6pZikWXWyRATAVbXnAHTe20-nQerb0"],
}
【问题讨论】:
-
您是否尝试在标题上设置
Authorization属性而不是尝试Add一个新属性? -
还有
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("key", "AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w"); -
@Joel Allison:我试过了,然后标题是“key AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w”。它不包含“=”符号。
-
如果这是您真正的 API 密钥,您可能希望在公开后撤销它...
标签: .net dotnet-httpclient google-cloud-messaging