.NET Core 2.0:仅允许“http”和“https”方案。参数名称:requestUri

时间:2018-06-15 14:29:11

标签: c# asp.net-core firebase-cloud-messaging

我有一个使用ASP.NET Core 2.0构建的Web API。我正在尝试拨打Firebase Cloud Messaging HTTP v1向移动客户端发送推送通知。根据文档,您需要调用此端点:

  

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

当我尝试进行此调用(使用我的令牌)时,我收到一条错误消息,仅允许http和https:

  

仅允许'http'和'https'方案。   参数名称:requestUri

此错误消息让我觉得HttpClient有一个问题:发送部分Uri。这是我写的代码:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://fcm.googleapis.com/v1/projects/my-project-id/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new 
System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var jsonMessage = JsonConvert.SerializeObject(message);
var stringConent = new StringContent(jsonMessage, System.Text.Encoding.UTF8, "application/json");
var fcmCall = await client.PostAsync("messages:send", stringConent);

我可以尝试解决这个问题?非常感谢。

指向FCM的链接:https://firebase.google.com/docs/cloud-messaging/send-message

1 个答案:

答案 0 :(得分:0)

您应该在请求URI中对冒号(:)进行编码。您可以使用WebUtility类:

System.Net.WebUtility.UrlEncode("messages:send")