からのHttpClientを使用して外部HTTPサービスを呼び出します確かに私が持っている問題を動作しないプライベートメソッドのコードは、コントローラの取得は、()のGetResponseを呼び出すことですが私は(次のようにサンプルコード <p></p> 4.5の.NET Framework上で動作しているASP.Net MVC 4のWeb APIプロジェクトがある内からのHttpClientを使用して外部サービスを呼び出していたWeb APIアクション
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
)(:これは、外部サービスを呼び出してテストするためのサンプルコード)であるとして戻り値を無視します結果を待つのではなく、result = nullの戻り値をすぐに実行します。
次のように私はまた、Webクライアントとの単純な同期呼び出しを使用して試してみました:正常に動作します
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
。
私は間違っていますか?なぜGet()は非同期サンプルのプライベートメソッド補完を待っていないのですか?
あなたはawaitでもGetResponse()を呼び出す必要はありませんか?さもなければ、それはそのメソッドが終了するのを待つことはありません。そして、あなたのコントローラのアクションは、結果をそのままnullのままにして終了します。 – jishi
はい、私はGet()をawaitを使用するのに必要な非同期としてマークすることができたことに気づいていませんでした。 – Redeemed1