Una operación bastante típica de CRUD dará como resultado que un objeto tenga su Id establecido una vez que persista.¿Cómo extraigo contenido de HttpResponseMessage de POST cuando uso WEB API?
Así que 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 entero, ¿cómo puedo hacer? usar HttpClient para obtener 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.
Update (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 Node.js inspirado.
De hecho - hay algunas muestras oficiales en CodePlex aquí para .NET 4.0 y 4.5 http://blogs.msdn.com/b/webdev/archive/2012/08/26/asp-net-web-api-and-httpclient-samples.aspx –
Sí. Gracias Mark. Esas muestras eran exactamente lo que estaba buscando. Los perdí de alguna manera. – ofraski