2014-04-30 20 views
20

İstek nesnesi vardır ve istek içerik türünü almak kolaydır. Ancak, yanıt için bir içerik türünü nasıl belirtirsiniz? Benim denetleyicisi bu (kısalık için eksize diğer eylemler) gibi görünür: Bu yanlış içerik türüne sahip olması dışında çalışıyorWeb API denetleyicisi yöntemi için ContentType nasıl belirtilir?

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(); 
    } 
} 

. Bu

Response.ContentType = "text/csv"; 

Biraz araştırma biz HttpResponseMessage dönmek için Eylem yazabilirsiniz ortaya koymaktadır yapmak istiyorum. Yani benim yönteminin sonu şu şekilde görünecektir: benim StringBuilder içeriğini nasıl

var response = new HttpResponseMessage() ; 
    response.Headers.Add("ContentType","text/csv"); 
    response.Content = //not sure how to set this 
    return response; 
HttpContent üzerinde dokümantasyon oldukça seyrek

, herkes itiraz bir HttpContent içine beni tavsiyelerde bulunabilir?

cevap

32

Daha sonra, HttpResponseMessage için yöntemin dönüş türünü değiştirmek Request.CreateResponse kullanmak gerekecektir:

// 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; 
} 
+0

Aha! İhtiyacım olan Request.CreateResponse'nin kullanımıydı. Puanlar hepsi senin! (Sadece MediaTypeFormatter'a bakın ... neden bu kadar karmaşık hale getirsin ki?) –

+0

"Henüz" dışarıda bırakabilirsiniz ... Ben alıyorum 'Yazabilir medya türü 'text/csv' ile eşleşen bir biçimlendirici bulunamadı 'String'.' bir örneği benim * bir dize * mantığı bir MediaTypeFormatter oluşturmak ve text/csv ile ilişkilendirmek ve LInQ sonucu CreateResponse ile iletmek gerektiğini anlatır. Beni oraya soktuğun için teşekkür ederim. –

+0

Haklısınız. Güncellemeye bakın. – haim770

İlgili konular