如何返回一个IHttpActionResult与Http状态码200,并在Http响应中传递内存流

本文关键字:Http 响应 并在 内存 状态 何返回 返回 一个 IHttpActionResult | 更新日期: 2023-09-27 18:13:03

在我的APIController.cs Get()方法,我怎么能返回一个IHttpActionResult与HTTP状态码200和在HTTP响应的内存流传递?

I tried doing this:

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

但是它将我的内存流转换为字符串并将其传递给Ok()。但是我不想在发送http响应之前将我的内存流转换为流。我在OkResult对象中没有看到任何允许我设置响应流的方法。

如何设置http响应正文?

如何返回一个IHttpActionResult与Http状态码200,并在Http响应中传递内存流

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

请让我知道,如果你想客户端代码也

试试这个代码

 public IHttpActionResult GetStream()
 {
    MemoryStream myMemoryStream = new MemoryStream();
    var sr = new System.IO.StreamReader(myMemoryStream);
    string myStr = sr.ReadToEnd();
    return Ok(myStr);          
 }