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?
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;
}