217 votes

Mettre le contenu dans l'objet HttpResponseMessage?

Il y a plusieurs mois, Microsoft a décidé de modifier la classe HttpResponseMessage. Auparavant, vous pouviez simplement passer un type de données dans le constructeur, puis renvoyer le message avec ces données, mais plus maintenant.

Maintenant, vous devez utiliser la propriété Content pour définir le contenu du message. Le problème est qu'il est de type HttpContent et que je n'arrive pas à trouver un moyen de convertir une chaîne, par exemple, en HttpContent.

Est-ce que quelqu'un sait comment traiter ce problème? Merci beaucoup.

259voto

Jim O'Neil Points 12570

Pour une chaîne en particulier, le moyen le plus rapide consiste à utiliser le constructeur StringContent.

 response.Content = new StringContent("Your response text");
 

Il existe un certain nombre de descendants de classe HttpContent supplémentaires pour d'autres scénarios courants.

146voto

Florin Dumitrescu Points 3501

Vous devez créer la réponse à l'aide de Request.CreateResponse :

 HttpResponseMessage response =  Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");
 

Vous pouvez transmettre des objets, et pas seulement des chaînes, à CreateResponse, qui les sérialisera en fonction de l'en-tête Accept de la demande. Cela vous évite de choisir manuellement un formateur.

75voto

praetor Points 285

Apparemment, la nouvelle façon de le faire est détaillée ici:

http://aspnetwebstack.codeplex.com/discussions/350492

Pour citer Henrik,

 HttpResponseMessage response = new HttpResponseMessage();

response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");
 

Donc, fondamentalement, il faut créer un type ObjectContent, qui peut apparemment être renvoyé sous forme d'objet HttpContent.

42voto

ScubaSteve Points 540

Pour tout objet en T, vous pouvez faire:

 return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X