###前提・実現したいこと
AzureFunctionAppで、下記のようなリクエストを投げる関数を作ろうとしていますが、結果がエラーとなります。
なお、下記のリクエストは正常なレスポンス({"success":true})を得られています。
curl https://xxxxx -H 'X-Api-Key: yyyyy' -H 'Content-Type: application/json' -X POST -d '[{"name": "Sample.foo", "time": '1491806100', "value": 60}]'
エラー解消の手がかりをご教授いただけませんでしょうか。
###発生している問題・エラーメッセージ
Httpリクエストの返却値は以下の通りです。
HTTP Status: BadRequest – Reason: Bad Request
送信データのRequestMessageは以下の通りです。
RequestMessage:Method: POST, RequestUri: 'https://xxxxx', Version: 1.1, Content: System.Net.Http.StringContent, Headers: { X-Api-Key: xxxxx Content-Type: application/json; charset=utf-8 Content-Length: 54 }
###該当のソースコード
cs
1 2 // POST 先 3 Uri theUri = new Uri("https://xxxxx"); 4 5 //HttpClient を作成しヘッダーを設定 6 HttpClient aClient = new HttpClient(); 7 aClient.DefaultRequestHeaders.Add("X-Api-Key", "yyyyy"); 8 9 // JSON としてシリアライズし POST するデータ 10 JsonItems jsonItems = new JsonItems(); 11 12 //値をセット 13 jsonItems.name = "Sample.foo"; 14 jsonItems.time = "1491806100"; 15 jsonItems.value = "60"; 16 17 // 該当タイプ用の JsonSerializer を作成 18 DataContractJsonSerializer jsonSer = new 19 DataContractJsonSerializer(typeof(JsonItems)); 20 21 // Serializer を使ってオブジェクトを MemoryStream に書き込み 22 MemoryStream ms = new MemoryStream(); 23 jsonSer.WriteObject(ms, jsonItems); 24 ms.Position = 0; 25 26 // StreamReader で StringContent (Json) をコンストラクト 27 StreamReader sr = new StreamReader(ms); 28 StringContent theContent = new StringContent(sr.ReadToEnd(), System.Text.Encoding.UTF8, "application/json"); 29 30 // データを送信 31 HttpResponseMessage aResponse = await aClient.PostAsync(theUri, theContent); 32 33 if (aResponse.IsSuccessStatusCode) 34 { 35 log.Info("成功!"); 36 } 37 else 38 { 39 log.Info("失敗!"); 40 // 応答ステータスコードを表示 41 String failureMsg = "HTTP Status: " + aResponse.StatusCode.ToString() + " – Reason: " + aResponse.ReasonPhrase; 42 43 log.Info("RequestMessage:" + aResponse.RequestMessage.ToString()); 44 log.Info("failureMsg:" + failureMsg.ToString()); 45 } 46
###試したこと
- HttpClientのヘッダ情報を下記の通り増やしましたがレスポンスは同じでした。
cs
1 aClient.DefaultRequestHeaders.Host = theUri.Host; 2 aClient.DefaultRequestHeaders.Add("Content-Type", "application/json;charset=UTF-8"); 3 aClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 4
- contentを下記の通りにしましたがレスポンスは同じでした。
cs
1 var content = new FormUrlEncodedContent(new Dictionary<string, string> 2 { 3 { "name", "Sample.azure" }, 4 { "time", "1491877200" },//TODO ★★$(date +%s) 5 { "value", "60" }, 6 });
###補足情報(言語/FW/ツール等のバージョンなど)
言語:C#
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/14 02:20