web-dev-qa-db-fra.com

Comment créer un message de réponse et y ajouter une chaîne de contenu dans ASP.NET 5 / MVC 6

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?

19
Sul Aga

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:

  • La méthode d'extension WriteAsync pour écrire le contenu de la chaîne dans le corps de la réponse.
  • La classe 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 .

31
Daniel J.G.