JSON非同期ポストの内容を受け取って解析するAPIコントローラを作成していますが、そのポスト内のStringContentオブジェクトの内容を読み取ることができません。ApiControllerのStringContentオブジェクトからJSONを読み取るにはどうすればよいですか?
ここに、私の値を見たい私のAPIコントローラのセクションがあります。 ApiControllerメソッドに到着する値はnullです。 jsonContentの値は空の文字列です。私が見たいと思っているのは、JSONオブジェクトの内容です。
public class ValuesController : ApiController
{
// POST api/values
public void Post([FromBody]string value)
{
HttpContent requestContent = Request.Content;
string jsonContent = requestContent.ReadAsStringAsync().Result;
// Also tried this per mybirthname's suggestion.
// But content ends up equaling 0 after this runs.
var content = Request.Content.ReadAsStreamAsync().Result.Seek(0, System.IO.SeekOrigin.Begin);
}
}
ここでは、どのように呼び出されているかを示すコントローラです。
[HttpPost]
public ActionResult ClientJsonPoster(MyComplexObject myObject)
{
this.ResponseInfo = new ResponseInfoModel();
PostToAPI(myObject, "http://localhost:60146", "api/values").Wait();
return View(this.ResponseInfo);
}
これは転記方法です。
private async Task PostToAPI(object myObject, string endpointUri, string endpointDirectory)
{
string myObjectAsJSON = System.Web.Helpers.Json.Encode(myObject);
StringContent stringContent = new StringContent(myObjectAsJSON, Encoding.UTF8, "application/json");
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(endpointUri);
using (HttpResponseMessage responseMessage = await httpClient.PostAsJsonAsync(endpointDirectory, stringContent).ConfigureAwait(false))
{
// Do something
}
}
}
私は、ApiController内のPostメソッドのシグネチャに問題があると考えます。しかし、どのように変化させるべきか分かりません。ご協力いただきありがとうございます。
[ASP.NET WEBAPIコントローラでRequest.Contentを読み取ることができません](http://stackoverflow.com/questions/10127803/cannot-read-request-content-inの可能性のある重複-asp-net-webapi-controller)を使用します。それが本当に良い理由を説明する7 upvotesで答えを確認してください! – mybirthname
それがどのように呼び出されているかを示します。通常はデッドロックにつながる非同期呼び出しと同期呼び出しを混在させるように見えます。手掛かりは、あなたのeximpleの '.Wait()'です。 – Nkosi
提案していただきありがとうございます。私はコンテンツストリームの位置をリセットしようとしましたが、値0でlongを返しました。私はそれをどのようにPost()メソッドに適用したかを見ることができます。また、.Wait()が間違っている場合、デッドロックを回避するためにはどのように調整する必要がありますか?ありがとう。 –