Как извлечь содержимое из HttpResponseMessage из POST при использовании WEB API?
Довольно типичная операция CRUD приводит к тому, что объект, у которого установлен Id, после его сохранения.
Поэтому, если у меня есть метод Post на контроллере, который принимает объект (скажем, JSON-сериализованный) и возвращает HttpResponseMessage с HttpStatusCode Created и Content, установленным в тот же объект с Id, обновленным с нуля до целого числа, как тогда я могу использовать HttpClient для при этом значении идентификатора?
Это'Вероятно, это довольно просто, но я вижу только System.Net.Http.StreamContent. Лучше просто вернуть Int из метода post?
Благодарю.
Обновление (следующий ответ):
Рабочий пример ...
namespace TryWebAPI.Models {
public class YouAreJoking {
public int? Id { get; set; }
public string ReallyRequiresFourPointFive { get; set; }
}
}
namespace TryWebAPI.Controllers {
public class RyeController : ApiController {
public HttpResponseMessage Post([FromBody] YouAreJoking value) {
//Patience simulated
value.Id = 42;
return new HttpResponseMessage(HttpStatusCode.Created) {
Content = new ObjectContent(value,
new JsonMediaTypeFormatter(),
new MediaTypeWithQualityHeaderValue("application/json"))
};
}
}
}
namespace TryWebApiClient {
internal class Program {
private static void Main(string[] args) {
var result = CreateHumour();
Console.WriteLine(result.Id);
Console.ReadLine();
}
private static YouAreJoking CreateHumour() {
var client = new HttpClient();
var pennyDropsFinally = new YouAreJoking { ReallyRequiresFourPointFive = "yes", Id = null };
YouAreJoking iGetItNow = null;
var result = client
.PostAsJsonAsync("http://localhost:1326/api/rye", pennyDropsFinally)
.ContinueWith(x => {
var response = x.Result;
var getResponseTask = response
.Content
.ReadAsAsync()
.ContinueWith(t => {
iGetItNow = t.Result;
return iGetItNow;
}
);
Task.WaitAll(getResponseTask);
return x.Result;
});
Task.WaitAll(result);
return iGetItNow;
}
}
}
Кажется, Node.js вдохновлен.