Ich bin völlig neu in dieser Art von Programmierung, so dass ich nicht wirklich weiß, ob es eine Antwort auf diese bereits gibt, aber ich konnte es nicht finden. So teste ich, um zu sehen, ob ich eine Trockenlauf-gcm-Nachricht erhalten kann, um ohne Fehler zu arbeiten.Fehler 400 GCM ungültige Anfrage json
Der Fehler, den ich bekomme, ist der Fehler 400 Invalid Request, und es sagt etwas über die JSON ist ungültig, so habe ich angenommen, dass das Problem mit String-Manipulation oder die Definition von Postdaten hat, aber ich kann es nicht fassen aus. Der Großteil des Codes wird sowieso nur kopiert, so dass man glauben könnte, dass andere in einer ähnlichen Situation den gleichen Fehler bekommen, wenn sie aus der gleichen Quelle kopieren.
Und auch ich habe tatsächliche Werte für die "Lorem" s.
Dies ist der einzige Code:
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;
}
}
}
Können Sie das Konsolenprotokoll der Zeichenfolge 'postData' veröffentlichen? Ich vermute es ist die Verkettung der "Wert" oder "regIds" darin, die das Problem verursacht. – adjuremods
@adjuremods {"collapse_key": "Standard", "time_to_live": 108, "delay_while_idle": true, "dry_run": true, "Daten": {"message": "{" Title ":" test "," " Nachricht ":" HelloWorld "," ItemId ": 220299}", "time": "22.04.2016 13:04:38"}, "registration_ids": ["aaaaaaaaaaaaaaaaaaaaaaaa"]} –