web-dev-qa-db-fra.com

Comment spécifier la méthode du contrôleur ContentType pour l'API Web

Il y a un objet Request, et obtenir le type de contenu de la demande est facile. Mais comment spécifiez-vous un type de contenu pour la réponse? Mon contrôleur ressemble à ceci (autres actions excisées par souci de concision):

public class AuditController : ApiController
{   
  // GET api/Audit/CSV
  [HttpGet, ActionName("CSV")]
  public string Csv(Guid sessionId, DateTime a, DateTime b, string predicate)
  {
    var result = new StringBuilder();
    //build a string
    return result.ToString();
  }
}

Cela fonctionne bien, sauf qu'il a le mauvais type de contenu. J'aimerais faire ça

Response.ContentType = "text/csv";

Une petite recherche révèle que nous pouvons taper l'Action pour retourner un HttpResponseMessage. Donc, la fin de ma méthode ressemblerait à ceci:

  var response = new HttpResponseMessage() ;
  response.Headers.Add("ContentType","text/csv");
  response.Content = //not sure how to set this
  return response;

La documentation sur HttpContent est plutôt clairsemée, est-ce que quelqu'un peut me conseiller sur la façon d'obtenir le contenu de mon StringBuilder dans un objet HttpContent?

24
Peter Wone

Vous devrez changer le type de retour de la méthode en HttpResponseMessage, puis utiliser Request.CreateResponse:

// GET api/Audit/CSV
[HttpGet, ActionName("CSV")]
public HttpResponseMessage Csv(Guid sessionId, DateTime a, DateTime b, string predicate)
{
    var result = new StringBuilder();

    //build a string

    var res = Request.CreateResponse(HttpStatusCode.OK);
    res.Content = new StringContent(result.ToString(), Encoding.UTF8, "text/csv");

    return res;
}
41
haim770