【问题标题】:How to return a IHttpActionResult with Http status code 200 and pass in a memory stream in the http response如何返回带有 Http 状态码 200 的 IHttpActionResult 并在 http 响应中传入内存流
【发布时间】:2017-02-23 03:59:35
【问题描述】:

在我的 APIController.cs Get() 方法中,如何返回 HTTP 状态代码为 200 的 IHttpActionResult 并在 HTTP 响应中传入内存流?

我试过这样做:

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

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

如何设置 http 响应正文?

【问题讨论】:

  • 我对web api不是很熟悉,但可能是这样的 HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, sr);返回响应;

标签: c# asp.net .net


【解决方案1】:
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());

如果您还需要客户端代码,请告诉我

【讨论】:

    【解决方案2】:

    试试这个代码

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2017-11-25
      • 1970-01-01
      相关资源
      最近更新 更多