send post Https request with Content Type application Json on C#
26,014
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",
"[email protected]");
httpWReq.Headers.Add("X-Amzn-Accept-Type",
"[email protected]");
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;
}
}
Author by
mouhcine
Updated on April 04, 2021Comments
-
mouhcine about 3 years
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: [email protected] Accept: application/json X-Amzn-Accept-Type: [email protected] { "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: [email protected] 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", "[email protected]"); client.DefaultRequestHeaders.Add("X-Amzn-Accept-Type", "[email protected]"); //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: [email protected] X-Amzn-Accept-Type: [email protected] Content-Type: application/json; charset=utf-8 Content-Length: 98 }} System.Net.Http.HttpRequestMessage
-
mouhcine over 10 yearsyes, it's already done, I correct it. but I have the same error response.
-
cgotberg over 10 yearsI don't see anything obviously wrong in your code. You might want to download and run a proxy like fiddler and set it up to work with https and see what's actually being sent across the wire. Maybe something weird is going on with the headers, but it's tough to say without being able to actually look at what's being sent and returned. Usually a bad request is because something is wrong with the json post.