このコード行があります
var response = new HttpClient().PostAsJsonAsync(posturi, model).Result;
Called WebAPI コントローラーは、オブジェクトが保存されたことを確認するために bool を返しますが、その bool 応答を返すにはどうすればよいですか?
このコード行があります
var response = new HttpClient().PostAsJsonAsync(posturi, model).Result;
Called WebAPI コントローラーは、オブジェクトが保存されたことを確認するために bool を返しますが、その bool 応答を返すにはどうすればよいですか?
コンテンツから引き続き取得:
var httpClient = new HttpClient();
var response = httpClient.PostAsJsonAsync(posturi, model).Result;
bool returnValue = response.Content.ReadAsAsync<bool>().Result;
しかし、これは結果を得るための迅速な方法のための本当に単純なアプローチです。プログラミングをサポートするように設計されているため、コードは次のようにする必要がありPostAsJsonAsync
ますReadAsAsync
。async await
var httpClient = new HttpClient();
var response = await httpClient.PostAsJsonAsync(posturi, model);
bool returnValue = await response.Content.ReadAsAsync<bool>();
また、フラグを使用してオブジェクトが保存されたかどうかを確認する代わりに、HTTP コードを使用し200 OK
て、保存が成功したことを確認する必要があります。
受け入れられた答えは技術的には正しいですが、への呼び出しで現在のスレッドをブロックします.Result
。.NET 4.5 以降を使用している場合は、ほとんどすべての状況でそれを避ける必要があります。代わりに、同等の非同期 (ノンブロッキング) バージョンを使用します。
var httpClient = new HttpClient();
var response = await httpClient.PostAsJsonAsync(posturi, model);
bool returnValue = await response.Content.ReadAsAsync<bool>();
上記のコードを含むメソッドはマークする必要がありasync
、それ自体をawait
編集する必要があることに注意してください。
.Result
非同期操作であるため、すぐに間違っているとは限りません
代わりに、次のようにして非同期にする必要があります。
var httpClient = new HttpClient()
var task = httpClient.PostAsJsonAsync(posturi, model)
.ContinueWith( x => x.Result.Content.ReadAsAsync<bool>().Result);
// 1. GETTING RESPONSE - NOT ASYNC WAY
task.Wait(); //THIS WILL HOLD THE THREAD AND IT WON'T BE ASYNC ANYMORE!
bool response = task.Result
// 2. GETTING RESPONSE - TASK ASYNC WAY (usually used in < .NET 4.5
task.ContinueWith( x => {
bool response = x.Result
});
// 3. GETTING RESPONSE - TASK ASYNC WAY (usually used in >= .NET 4.5
bool response = await task;
注:ここに書いたばかりなので、実際にはテストしませんでしたが、多かれ少なかれそれはあなたが望むものです.
それが役立つことを願っています!
HttpStatusCode を使用して結果を確認しました。
public HttpStatusCode PostStaffPositions(Foo foo)
{
string uri = myapiuri;
using (HttpClient httpClient = new HttpClient())
{
var response = httpClient.PostAsJsonAsync(uri, foo).Result;
return response.StatusCode;
}
}
そして、コントローラーで次のように確認します。
HttpStatusCode update = staffrest.PostStaffPositions(foo);
if (update == HttpStatusCode.OK)
{
//Update Succeed
}
else
{
//Update Failed
}
ジェネリック バージョンを呼び出すと、bool が返されます。
var response = new HttpClient().PostAsJsonAsync<bool>(posturi, model).Result;
少なくともドキュメントによると。