Я совершенно новичок в этом программировании, поэтому я действительно не знаю, есть ли на это ответ, но я не смог его найти. Поэтому я тестирую, могу ли я получить сообщение gm с сухим пробегом, чтобы работать без ошибок.Ошибка 400 GCM Неверный запрос json
Ошибка, которую я получаю, это ошибка 400 Invalid Request, и это говорит о некорректной ошибке json, поэтому я предположил, что проблема связана с строковыми манипуляциями или определением postdata, но я не могу это понять вне. В большинстве случаев код просто скопирован, так что можно поверить, что другие в подобной ситуации получат ту же ошибку, если они будут копироваться из одного источника.
А также я ввел фактические значения для «lorem» s.
Это единственный код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
namespace ServerGMC
{
public class ServerGMC
{
static void Main()
{
// Prepares and calls the function to send message
List<string> RedIdList = new List<string>(1) { "aaaaaaaaaaaaaaaaaaaaaaaa" };
RedIdList.TrimExcess();
Console.WriteLine(SendNotification(RedIdList, "HelloWorld", "test", 220299));
Console.Read();
}
static public string SendNotification(List<string> deviceRegIds, string message, string title, long id)
{
try
{
string regIds = string.Join("\",\"", deviceRegIds);
string AppId = "lorem";
var SenderId = "lorem";
NotificationMessage nm = new NotificationMessage();
nm.Title = title;
nm.Message = message;
nm.ItemId = id;
var value = new JavaScriptSerializer().Serialize(nm);
WebRequest wRequest;
wRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
wRequest.Method = "post";
wRequest.ContentType = " application/json;charset=UTF-8";
wRequest.Headers.Add(string.Format("Authorization: key={0}", AppId));
wRequest.Headers.Add(string.Format("Sender: id={0}", SenderId));
string postData = "{\"collapse_key\":\"standard\",\"time_to_live\":108,\"delay_while_idle\":true,\"dry_run\":true,\"data\": { \"message\" : " + "\"" + value + "\",\"time\": " + "\"" + System.DateTime.Now.ToString() + "\"},\"registration_ids\":[\"" + regIds + "\"]}";
//string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&date.time=" + System.DateTime.Now.ToString() + "®istration_ids=" + regIds + "";
Console.WriteLine(postData);
Byte[] bytes = Encoding.UTF8.GetBytes(postData);
wRequest.ContentLength = bytes.Length;
Stream stream = wRequest.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
WebResponse wResponse = wRequest.GetResponse();
stream = wResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream);
String response = reader.ReadToEnd();
HttpWebResponse httpResponse = (HttpWebResponse)wResponse;
string status = httpResponse.StatusCode.ToString();
reader.Close();
stream.Close();
wResponse.Close();
if (status == "")
{
return response;
}
else
{
return "";
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine();
return "";
}
}
private class NotificationMessage
{
public string Title;
public string Message;
public long ItemId;
}
}
}
Можете ли вы разместить консольный журнал строки 'postData'? Я предполагаю, что это конкатенация 'value' или' regIds' в ней, что вызывает проблему. – adjuremods
@adjuremods {"collapse_key": "standard", "time_to_live": 108, "delay_while_idle": true, "dry_run": true, "data": {"message": "{" Title ":" test "," Сообщение ":" HelloWorld "," ItemId ": 220299}", "time": "22/04/2016 13:04:38"}, "registration_ids": ["aaaaaaaaaaaaaaa"]} –