send post Https request with Content Type application Json on C#
amazon-device-messaging, asp.net, c#, httpclient, json.net
Solution
I found an other solution that work perfectly .
private void sendNotification(String registrationID,String message,String title,String accessToken)
{
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("https://api.amazon.com/messaging/registrations/" + registrationID + "/messages");
Encoding encoding = new UTF8Encoding();
string postData = "{\"data\":{\"message\":\""+message+"\",\"title\":\""+title+"\"},\"consolidationKey\":\"Some Key\",\"expiresAfter\":86400}";
byte[] data = encoding.GetBytes(postData);
httpWReq.ProtocolVersion = HttpVersion.Version11;
httpWReq.Method = "POST";
httpWReq.ContentType = "application/json";//charset=UTF-8";
httpWReq.Headers.Add("X-Amzn-Type-Version",
"com.amazon.device.messaging.ADMMessage@1.0");
httpWReq.Headers.Add("X-Amzn-Accept-Type",
"com.amazon.device.messaging.ADMSendResult@1.0");
httpWReq.Headers.Add(HttpRequestHeader.Authorization,
"Bearer " + accessToken);
httpWReq.ContentLength = data.Length;
Stream stream = httpWReq.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();
string s=response.ToString();
StreamReader reader = new StreamReader(response.GetResponseStream());
String jsonresponse = "";
String temp = null;
while ((temp = reader.ReadLine()) != null)
{
jsonresponse += temp;
}
}
Problem
I'm trying to send the following request: ``` POST /messaging/registrations/(REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE)/messages HTTP/1.1 Host: api.amazon.com Authorization: Bearer (MY_ACCESS_TOKEN) Content-Type: application/json X-Amzn-Type-Version: com.amazon.device.messaging.ADMMessage@1.0 Accept: application/json X-Amzn-Accept-Type: com.amazon.device.messaging.ADMSendResult@1.0 { "data":{"message":"value1","title":"value2"}, "consolidationKey":"Some Key", "expiresAfter":86400 } ``` in order to get a response format like this: ``` HTTP/1.1 200 X-Amzn-Data-md5: t5psxALRTM7WN30Q8f20tw== X-Amzn-RequestId: e8bef3ce-242e-11e2-8484-47f4656fc00d Content-Type: application/json X-Amzn-Type-Version: com.amazon.device.messaging.ADMSendResult@1.0 Content-Length: 308 {"registrationID":(REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE)} ``` to do that I tried with this code: ``` private void sendNotification(String registrationID,String message, String title,String accessToken) { //registrationID content (REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE) that can vary string url = "https://api.amazon.com/messaging/registrations/"+ registrationID +"/messages"; var client = new HttpClient(); //set Request headers client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Bearer", accessToken); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("X-Amzn-Type-Version", "com.amazon.device.messaging.ADMMessage@1.0"); client.DefaultRequestHeaders.Add("X-Amzn-Accept-Type", "com.amazon.device.messaging.ADMSendResult@1.0"); //the content of the message body var content = new Dictionary<string, Object>(); content.Add("consolidationKey", "SyncNow"); content.Add("expiresAfter", 86400); var data = new Dictionary<string, string>(); data.Add("message", message); data.Add("title", title); content.Add("data", data); var result = client.PostAsJsonAsync<Dictionary<string, Object>>(url, content).Result; } ``` As response I get StatusCode:400,ReasonPhrase:'Bad Request', I don't know why? For detail about result which I got: ``` result {StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { x-amzn-RequestId: 1b943a1c-fe94-11e2-b963-71a537223b43 Vary: Accept-Encoding Vary: User-Agent Cneonction: close Date: Tue, 06 Aug 2013 12:31:24 GMT Content-Length: 34 Content-Type: application/json }} System.Net.Http.HttpResponseMessage result.RequestMessage {Method: POST, RequestUri: 'https://api.amazon.com/messaging/registrations/(REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE)/messages', Version: 1.1, Content: System.Net.Http.ObjectContent`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089], [System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], Headers: { Authorization: Bearer (MY_ACCESS_TOKEN) Accept: application/json X-Amzn-Type-Version: com.amazon.device.messaging.ADMMessage@1.0 X-Amzn-Accept-Type: com.amazon.device.messaging.ADMSendResult@1.0 Content-Type: application/json; charset=utf-8 Content-Length: 98 }} System.Net.Http.HttpRequestMessage ```