2016-10-13 2 views
0

В моем методе APIController.cs Get(), как я могу вернуть IHttpActionResult с кодом статуса HTTP 200 и передать в поток памяти в ответе HTTP?Как вернуть IHttpActionResult с кодом статуса Http 200 и передать в потоке памяти ответ HTTP

Я попытался сделать это:

var sr = new StreamReader(myMemoryStream); 
    string myStr = sr.ReadToEnd(); 
    return Ok(myStr); 

Но он преобразует свой поток памяти в строку и передать, что Ok(). Но я не хочу, чтобы поток моей памяти транслировался до отправки в http respone. И я не вижу никакого метода в объекте OkResult, который позволяет мне установить поток ответов.

Как настроить тело ответа HTTP?

+0

Я не очень знакомы с web api, но, возможно, что-то вроде этого HttpResponseMessage response = Request.CreateResponse (HttpStatusCode.OK, sr); ответ возврата; –

+0

http://stackoverflow.com/a/26041298/2779990 –

ответ

0
public HttpResponseMessage GetFile() 
{ 
    byte[] byteArray; 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
    // Do you processign here 
    byteArray = memoryStream.ToArray(); 
    } 
    var response = new HttpResponseMessage(HttpStatusCode.OK); 
    response.Content = new ByteArrayContent(byteArray); 
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
    //suppose its .xlsx file 
    response.Content.Headers.ContentDisposition.FileName = "Sample.xlsx"; 
    return response; 
} 

если вы возвращаете IHttpActionResult, а затем вернуться

return ResponseMessage(GetFile()); 

Пожалуйста, дайте мне знать, если вы хотите, на стороне клиента код также

0

Попробуйте этот код

public IHttpActionResult GetStream() 
{ 
    MemoryStream myMemoryStream = new MemoryStream(); 
    var sr = new System.IO.StreamReader(myMemoryStream); 
    string myStr = sr.ReadToEnd(); 
    return Ok(myStr);   
} 
Смежные вопросы