Es gibt ein Request-Objekt, und es ist einfach, den Inhaltstyp der Anfrage abzurufen. Aber wie geben Sie einen Inhaltstyp für die Antwort angeben? Mein Controller sieht wie folgt aus (andere Aktionen der Kürze ausgeschnitten):So geben Sie ContentType für die Web-API-Controller-Methode an
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();
}
}
Diese Ausnahme gut funktioniert, dass sie den falschen Inhaltstyp hat. Ich möchte diese
Response.ContentType = "text/csv";
Ein wenig Forschung tun, zeigt, dass wir den Aktionstyp kann eine HttpResponseMessage zurückzukehren. Also das Ende meiner Methode würde wie folgt aussehen:
var response = new HttpResponseMessage() ;
response.Headers.Add("ContentType","text/csv");
response.Content = //not sure how to set this
return response;
Die Dokumentation auf HttpContent eher spärlich ist, kann jemand mir raten, wie der Inhalt meines String in eine HttpContent zu bekommen Objekt?
Aha! Es war die Verwendung von Request.CreateResponse, die ich brauchte. Punkte sind alle deine! (Ich habe mir MediaTypeFormatter angeschaut ... warum sollte jemand das so kompliziert machen?) –
Sie können "noch" auslassen ... Ich bekomme 'Konnte keinen Formatierer finden, der dem Medientyp 'text/csv' entspricht, der schreiben kann eine Instanz von "String". Das sagt mir, dass ich meine * string * -Logik in eine MediaTypeFormatter einbauen und sie mit text/csv assoziieren muss und das LINQ-Ergebnis über CreateResponse an sie übergeben muss. Danke, dass du mich über den Buckel gebracht hast. –
Sie haben Recht. Siehe mein Update. – haim770