Я пишу контроллер API, предназначенный для приема и анализа содержимого асинхронной почты JSON и не могу прочитать содержимое объекта StringContent в этом сообщении.Как я могу прочитать JSON из объекта StringContent в ApiController?
Вот раздел моего контроллера 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
}
}
}
Я подозреваю, что что-то не так с сигнатурой метода Post внутри ApiController. Но не знаю, как это должно измениться. Спасибо за вашу помощь.
Возможный дубликат [Невозможно прочитать Request.Content в контроллере ASP.NET WebAPI] (http://stackoverflow.com/questions/10127803/cannot-read-request-content-in -Asp-нетто-WebAPI-контроллер). Проверьте ответ с 7 upvotes, он объясняет, почему действительно хорошо! – mybirthname
Покажите, как это называется. похоже, что вы смешиваете вызовы async и sync, которые обычно приводят к взаимоблокировкам. Ключ - это '.Wait()' в вашем exameple. – Nkosi
Спасибо за предложения. Я попытался сбросить позицию потока контента, и это вернуло значение long со значением 0. Вы можете увидеть, как я применил это в методе Post(). Кроме того, если ошибка .Wait() неверна, как это нужно отрегулировать, чтобы избежать блокировки? Благодарю. –