2016-04-21 4 views
1

Я совершенно новичок в этом программировании, поэтому я действительно не знаю, есть ли на это ответ, но я не смог его найти. Поэтому я тестирую, могу ли я получить сообщение 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() + "&registration_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; 
     } 
    } 
} 
+0

Можете ли вы разместить консольный журнал строки 'postData'? Я предполагаю, что это конкатенация 'value' или' regIds' в ней, что вызывает проблему. – adjuremods

+0

@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"]} –

ответ

0

postData не отформатирован в формате JSON. Если вы проверить его с помощью онлайн-инструмент форматирования, он выглядит следующим образом

{ 
    "collapse_key":"standard", 
    "time_to_live":108, 
    "delay_while_idle":true, 
    "dry_run":‌​true, 
    "data":{ 
     "message":"{"Title":"test", 
     "Message":"HelloWorld", 
     "ItemId":220299}", 
     "time":"22/04/2016 13:04:38" 
    }, 
    "registration_ids":["aaaaaaaaaaaaaaaaaaaaaaaa"] 
} 

Вы можете либо удалить data.message узел и поместите его свойства в data, или использовать третий сторонних JSON парсер или System.Web.Helpers.Json.Decode (которые были предложены в this issue)

Надеюсь, это поможет решить эту проблему.

Счастливое кодирование!

+0

Большое спасибо! Я работал с ним только с использованием простого текстового форматирования, но я снова переключусь на JSON, так как gcm лучше работает с ним. –

Смежные вопросы