Il y a plusieurs mois, Microsoft a décidé de changer la classe HttpResponseMessage. Avant, 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 je n'arrive pas à trouver un moyen de convertir une chaîne, par exemple, en HttpContent.
Quelqu'un sait-il comment traiter ce problème? Merci beaucoup.
c#
asp.net-mvc
asp.net-web-api
praetor
la source
la source
Vous devez créer la réponse à l'aide de Request.CreateResponse :
Vous pouvez transmettre des objets non seulement des chaînes à CreateResponse et il les sérialisera en fonction de l'en-tête Accept de la demande. Cela vous évite de choisir manuellement un formateur.
la source
CreateErrorResponse()
si la réponse est une erreur, comme c'est le cas dans l'exemple de cette réponse. Dans mon try-catch que j'utilise:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
Et c'est la bonne réponse si vous êtes préoccupé par le respect de l'en-tête Accept de l'appelant, sans manigances supplémentaires. (Et vous utilisez WebAPI)ApiController
. Si vous n'héritez qu'à laController
place, cela ne fonctionne pas et vous devez le créer vous-même:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Apparemment, la nouvelle façon de le faire est détaillée ici:
http://aspnetwebstack.codeplex.com/discussions/350492
Pour citer Henrik,
Donc, fondamentalement, il faut créer un type ObjectContent, qui peut apparemment être retourné en tant qu'objet HttpContent.
la source
new JsonMediaTypeFormatter();
ou similaire en fonction de votre formatObjectContent
n'est pas trouvé, utilisant WCFLa solution simple ligne la plus simple est d'utiliser
Pour le contenu JSON sérialisé:
la source
Pour tout objet T, vous pouvez faire:
la source
Request
n'est disponible qu'avec uneCreateResponse
méthode si vous héritezApiController
. Cela ne fonctionnera pas si vous utilisezController
.Vous pouvez créer vos propres types de contenu spécialisés. Par exemple, un pour le contenu Json et un pour le contenu Xml (puis attribuez-les simplement à HttpResponseMessage.Content):
la source
Inspiré par la réponse de Simon Mattes, je devais satisfaire le type de retour requis par IHttpActionResult ResponseMessageResult. En utilisant également JsonContent de nashawn, j'ai fini avec ...
Voir la réponse de nashawn pour JsonContent.
la source
Nul doute que vous avez raison Florin. Je travaillais sur ce projet et j'ai trouvé que ce morceau de code:
Peut être remplacé par:
la source