Dans l'API Web 2, nous faisions cela pour obtenir une réponse avec un contenu de chaîne:
var response = Request.CreateResponse(HttpStatusCode.Ok);
response.Content = new StringContent("<my json result>", Encoding.UTF8, "application/json");
Comment pouvez-vous obtenir la même chose dans ASP.NET 5/MVC 6 sans utiliser l'une des classes intégrées comme ObjectResult?
Vous pouvez écrire au Response.Body
stream directement (comme Body
est un vieux System.IO.Stream
) et définissez manuellement le type de contenu:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
byte[] data = Encoding.UTF8.GetBytes(jsonString);
Response.ContentType = "application/json";
await Response.Body.WriteAsync(data, 0, data.Length);
}
Vous pourriez vous éviter quelques problèmes en utilisant certains utilitaires de Microsoft.AspNet.Http
:
WriteAsync
pour écrire le contenu de la chaîne dans le corps de la réponse.MediaTypeHeaderValue
pour spécifier l'en-tête du type de contenu. (Il fait quelques validations et dispose d'une API pour ajouter des paramètres supplémentaires comme le jeu de caractères)La même action ressemblerait donc à:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
Response.ContentType = new MediaTypeHeaderValue("application/json").ToString();
await Response.WriteAsync(jsonString, Encoding.UTF8);
}
En cas de doute, vous pouvez toujours consulter l'implémentation de ContentResult
et/ou JsonResult
.