我希望有可能在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"
}
答案 0 :(得分:0)
我发现了错误。我使用以下内容返回我的多部分内容:
using (var stream = MyFileStream())
{
var respone = MultipartResponseHelper.GetMultipartResponse(response, stream, Request);
return respone;
}
所以它返回正确的响应,但然后在multipartContent内部流将被处置,这是问题的原因。