2014-04-30 8 views
20

के लिए ContentType निर्दिष्ट करने के लिए एक अनुरोध ऑब्जेक्ट है, और अनुरोध सामग्री प्रकार प्राप्त करना आसान है। लेकिन आप प्रतिक्रिया के लिए एक सामग्री प्रकार निर्दिष्ट करते हैं? मेरे नियंत्रक इस (अन्य संक्षिप्तता के लिए excised कार्यों) की तरह दिखता है:वेब एपीआई नियंत्रक विधि

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

इस को छोड़कर यह गलत सामग्री प्रकार है कि ठीक काम करता है। मैं इस

Response.ContentType = "text/csv"; 

एक छोटे से अनुसंधान पता चलता है कि हम एक HttpResponseMessage वापस जाने के लिए कार्रवाई टाइप कर सकते हैं करना चाहते हैं। तो मेरी विधि के अंत इस प्रकार दिखाई देगा:

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

HttpContent पर प्रलेखन बल्कि विरल है, किसी को भी मुझ पर कैसे मेरे StringBuilder की सामग्री को प्राप्त करने के लिए एक HttpContent में सलाह दे सकते हैं आपत्ति?

उत्तर

32

आप HttpResponseMessage को विधि की वापसी प्रकार बदलने के लिए तो 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; 
} 
+0

अहा! यह Request.CreateResponse का उपयोग था जिसकी मुझे आवश्यकता थी। अंक आपके सभी हैं! (बस MediaTypeFormatter को देखा ... कोई भी इसे इतना जटिल क्यों बनायेगा?) –

+0

आप "अभी तक" छोड़ सकते हैं ... मुझे मिल रहा है 'मीडिया प्रकार' टेक्स्ट/सीएसवी 'से मेल खाने वाले फॉर्मेटर को नहीं मिला जो लिख सकता है 'स्ट्रिंग' का एक उदाहरण जो मुझे बताता है कि मुझे अपने * एक स्ट्रिंग * तर्क को मीडियाटाइपफॉर्मेटर में डालने की आवश्यकता है और इसे टेक्स्ट/सीएसवी के साथ संबद्ध करें, और LINQ परिणाम को CreateResponse के माध्यम से पास करें। मुझे वहां कूबड़ पर लाने के लिए धन्यवाद। –

+0

आप सही हैं। मेरा अपडेट देखें। – haim770

संबंधित मुद्दे