我正在尝试使用System.Net.HttpClient
课程向Google Cloud Messaging发送消息。
Google Cloud Message要求您包含名为“授权”的标头,其格式类似于:
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'的格式为 无效。
并且callstack是:
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"],
}
答案 0 :(得分:7)
答案 1 :(得分:4)
那是因为你的价值违反了HTTP规范。
标题应包含Authorization: scheme SPACE value
,如下所述:http://www.ietf.org/rfc/rfc2617.txt
在你的情况下:
Authorization: key AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D