从ASP.NET发送FCM通知至安卓应用时遇405方法不允许错误
解决ASP.NET发送FCM通知时的405错误及接收问题
嘿,我来帮你一步步排查并解决这个问题!首先咱们先锁定核心问题,再逐个修复:
1. 错误的FCM API地址是触发405的关键
你代码里写的webAddr = "https://xxxx/fcm/send"完全不对!FCM的官方有效API端点是https://fcm.googleapis.com/fcm/send,这个错误地址直接导致目标服务器拒绝你的POST请求,返回了405 Method Not Allowed。
2. JSON格式存在语法错误
你构造的JSON字符串末尾多了个多余的逗号,这会导致FCM服务器解析失败:
{"to": "**recievers key**","data": {"message": "This is a Firebase Cloud Messaging Topic Message!",}}
把message值后面的逗号删掉,修正后如下:
{"to": "**recievers key**","data": {"message": "This is a Firebase Cloud Messaging Topic Message!"}}
3. 其他需要确认的细节
- 确保
serverKey是Firebase项目的服务器密钥:可以在Firebase控制台的「项目设置」→「云消息传递」面板找到,别误用了客户端密钥或其他类型的密钥。 - 检查
**recievers key**是有效的设备令牌(FCM Registration Token),如果令牌过期、无效或者和项目不匹配,也会导致发送失败。
修复后的完整代码
这里给你调整好的可运行代码,替换掉错误的部分即可:
static void SendMessage() { string serverKey = "你的Firebase服务器密钥"; try { var result = "-1"; // 修正FCM官方API地址 var webAddr = "https://fcm.googleapis.com/fcm/send"; var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr); httpWebRequest.ContentType = "application/json"; httpWebRequest.Headers.Add("Authorization: key=" + serverKey); httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { // 修正JSON语法错误 string json = "{\"to\": \"有效的设备令牌\",\"data\": {\"message\": \"This is a Firebase Cloud Messaging Topic Message!\"}}"; streamWriter.Write(json); streamWriter.Flush(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { result = streamReader.ReadToEnd(); // 打印FCM响应,方便排查后续问题 Console.WriteLine("FCM响应结果:" + result); } } catch (Exception ex) { Console.WriteLine("***********http**********" + ex.Message); } }
额外排查提示
如果修复后仍有问题,可以:
- 检查IIS服务器是否允许对外发送HTTPS请求,部分服务器可能有防火墙或代理限制。
- 查看FCM返回的
result内容,里面会包含具体错误信息(比如令牌无效、密钥权限不足等),能帮你快速定位剩余问题。
内容的提问来源于stack exchange,提问作者user9179535
相关产品推荐
相关产品推荐

