asp.net mvc - net - ¿Cómo extraigo contenido de HttpResponseMessage de POST cuando uso WEB API?
web api in asp net (1)
Puede usar ReadAsAsync<T>
.NET 4 (puedes hacerlo sin continuación también)
var resultTask = client.PostAsJsonAsync<MyObject>("http://localhost/api/service",new MyObject()).ContinueWith<HttpResponseMessage>(t => {
var response = t.Result;
var objectTask = response.Content.ReadAsAsync<MyObject>().ContinueWith<Url>(u => {
var myobject = u.Result;
//do stuff
});
});
.NET 4.5
var response = await client.PostAsJsonAsync<MyObject>("http://localhost/api/service", new MyObject());
var myobject = await response.Content.ReadAsAsync<MyObject>();
Una operación bastante típica de CRUD dará como resultado que un objeto tenga su Id establecido una vez que persista.
Entonces, si tengo el método Post en el controlador que acepta un objeto (JSON serializado, por ejemplo) y devuelve un HttpResponseMessage con HttpStatusCode Created y Content establecido en el mismo objeto con Id actualizado de nulo a un entero, ¿cómo debo usar HttpClient para obtener en ese valor Id?
Probablemente sea bastante simple, pero todo lo que veo es System.Net.Http.StreamContent. ¿Es mejor devolver un Int del método de publicación?
Gracias.
Actualización (siguiente respuesta):
Un ejemplo de trabajo ...
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<YouAreJoking>(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<YouAreJoking>()
.ContinueWith<YouAreJoking>(t => {
iGetItNow = t.Result;
return iGetItNow;
}
);
Task.WaitAll(getResponseTask);
return x.Result;
});
Task.WaitAll(result);
return iGetItNow;
}
}
}
Parece inspirado Node.js.