前提・実現したいこと
C#でHttpのリクエストを送信し、その戻り値によって処理を分けたいです。
試したこと
HttpClientを使ってみるを参考に少し改良して以下のソースを作成しました。
using System.Net.Http; // ←追加 private static HttpClient client = new HttpClient(); private async Task<string> sendRequest(string url, string json) { // メソッドにPOSTを指定 HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); // 今回はJSONをPOSTしてみる request.Content = new StringContent(json, Encoding.UTF8, "application/json"); // リクエストを送信し、その結果を取得 var response = await client.SendAsync(request); // 取得した結果をstring形式で返す return await response.Content.ReadAsStringAsync(); }
static void Main(string[] args) { string url = "http://******"; // post先 string json = "{\"age\":\"44歳\",\"name\":\"大泉 洋\"}"; // 送信するJSON string responseData = ""; // リクエスト送信して、タスクの返りを待つ sendRequest(url, json).ContinueWith( (task) => { // レスポンスを取得 responseData = task.Result; }); if(responseData.Length == 0){ Console.Write("失敗"); }
この時、自分としては、taskの完了を待ってから
if(responseData.Length == 0){
の判定に進むのかと思ったのですが、デバッガーで進めていくと
if(responseData.Length == 0) ``` を先に見てから
responseData = task.Result;
が設定されているようでした。(この時点ではresponseData には期待した値が入っていますが先にresponseData.Length == 0を通ってしまうためいつも「失敗」が返ってきます。) どうすればよいでしょうか? ### 補足情報(FW/ツールのバージョンなど) C# ### 追記 さらにここからリクエストを送信する場合は以下のようにするのでしょうか? また、見ていたページを参考にただ書いただけなのですが、結果をまって次の処理をするならば同期的に処理をしてもいい気がするのですがどうでしょうか…
string url = "http://******"; // post先
string json = "{"age":"44歳","name":"大泉 洋"}"; // 送信するJSON
string responseData = "";
// リクエスト送信して、タスクの返りを待つ
sendRequest(url, json).ContinueWith(
(task) =>
{
// レスポンスを取得
responseData = task.Result;
if(responseData.Length == 0){
Console.Write("失敗");
}
url = "http://******/test";
json = "{\test1"":"aa","test2":"bb"}";
string responseData2 = "";
sendRequest(url, json).ContinueWith(
(task2) =>
{
// レスポンスを取得
responseData2 = task2.Result;
});
});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 00:50
2019/11/21 07:29 編集
2019/11/19 02:47
2019/11/19 02:56
2019/11/19 03:02
2019/11/19 03:08
2019/11/19 03:14
2019/11/19 04:46