Web API中的MultipartContent响应

时间:2016-07-26 08:33:52

标签: c# asp.net-web-api

我希望有可能在Web API中为请求返回复杂的响应。例如,我想返回一些复杂对象的流。 我尝试使用MultipartFormDataContent:

    public static HttpResponseMessage GetMultipartResponse<T>(T responseData, Stream streamToReturn)
    {
        return new HttpResponseMessage
        {
            Content = new MultipartContent
            {
                new StreamContent(streamToReturn),
                new ObjectContent<T>(responseData, new JsonMediaTypeFormatter())
            }
        };
    }

我在服务器端有一个正常的HttpResponseMessage。我可以通过调试器看到我的Web API方法如何返回此响应,但在客户端,我遇到了错误:

StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Pragma: no-cache
  X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNccnVzdGFtX3NhbGFraHV0ZGlub3ZcZG9jdW1lbnRzXHZpc3VhbCBzdHVkaW8gMjAxM1xQcm9qZWN0c1xGaWxlU2VydmljZUFQSVxGaWxlU2VydmljZUFQSVxhcGlcZ2V0?=
  Cache-Control: no-cache
  Date: Tue, 26 Jul 2016 08:30:22 GMT
  Server: Microsoft-IIS/8.0
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Length: 1444
  Content-Type: application/json; charset=utf-8
  Expires: -1
}

客户端或服务器端没有其他例外,我无法通过启用错误详细信息获取更多信息:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

更新 尝试在客户端阅读响应:

var result = await response.Content.ReadAsMultipartAsync();

得到了这个例外:

  

无效的&#39; HttpContent&#39;实例提供。它没有以&#39; multipart /&#39;开头的内容类型标题。

我哪里出错了?

更新2: 我在服务器端有正常的响应:

    StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.MultipartContent, Headers:
    {
      Content-Type: multipart/multipart; boundary="3e6d3573-9031-41a7-b7f4-d1421bc1451d"
    }

1 个答案:

答案 0 :(得分:0)

我发现了错误。我使用以下内容返回我的多部分内容:

        using (var stream = MyFileStream())
        {
            var respone = MultipartResponseHelper.GetMultipartResponse(response, stream, Request);
            return respone;
        }

所以它返回正确的响应,但然后在multipartContent内部流将被处置,这是问题的原因。