現在、Web APIと統合されたアプリケーションを開発中です。私はPUT
要求をWeb APIに送信して製品を更新する非同期機能を持っています。コンソールアプリでHttpReponseMessageにStatusCode 200がありますが、 'Result'が空です。
public async Task<ResponseStatus> updateProduct(Item product)
{
string URL = client.BaseAddress + "/catalog/products/" + product.id;
HttpResponseMessage response = await client.PutAsJsonAsync(URL, product).ConfigureAwait(false);
var payload = response.Content.ReadAsStringAsync();
ResponseStatus res = JsonConvert.DeserializeObject<ResponseStatus>(await payload.ConfigureAwait(false));
return res;
}
私はこの機能が意図したとおりに動作し、私は応答のResult
でJSON文字列として更新された製品を受け取る自分のアプリケーションをテストするために使用しています。
私はASP.Netアプリケーションからこの関数を呼び出すしようとするとしかし、私はそれが200のステータスコードを持っているにもかかわらず、私はまた私の更新ことを確認することができ、Result
に空の文字列を受け取りますコンソールアプリケーションで呼び出されたときに確実に更新されますが、製品には影響しません。
これはASP.Netアプリケーションとテストコンソールアプリケーションで動作を除いて、いくつかのWeb APIは、私は、このようなほぼ正確に同じように機能し、このGET
要求として持っていることを呼び出すがあります。 ASP.Netアプリで私もResult
かかわらず、成功のステータスコードを受け取るのはなぜ
public async Task<Product> getProductByID(int id)
{
Product product = null;
string URL = client.BaseAddress + "/catalog/products/" + id;
string additionalQuery = "include=images,variants";
HttpResponseMessage response = await client.GetAsync(URL + "?" + additionalQuery).ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
var payload = response.Content.ReadAsStringAsync();
product = JsonConvert.DeserializeObject<Product>(await payload.ConfigureAwait(false));
}
return product;
}
は空であり、製品への更新が実際に行われていませんか?
私は 'ResponseStatus res = JsonConvert.DeserializeObject(await payload);に変更しようとしましたが、残念ながらそれは違いはありませんでした。他の行からConfigureAwait(false)を削除するべきですか? –
潜在的に 'awaitクライアントを持つ行。GetAsync' – toadflakz
残念ながら、私の質問によると[client.GetAsync]行が呼び出された後、アプリケーションのデバッグがちょうど停止することを意味しています[ここ](https://stackoverflow.com/questions/44828701/calling-asynchronous -api-in-asp-net-application)を使用して問題点を説明します。 'await payload.ConfigureAwaity(false)'の行は私が私の答えで示した 'getProductByID'関数で正しく動作するので、それは問題ではないと思います。 –