如何在Web API中接收GZIP发布请求?

时间:2017-07-16 11:37:50

标签: .net xml asp.net-web-api gzipstream

我正在尝试使用Web API从数据提供程序接收帖子。

当我使用以下功能从我的web api保存请求时:

public async Task<HttpResponseMessage> Import(HttpRequestMessage request)

然后将以下代码中的流保存到文件中:

var stream = await request.Content.ReadAsStreamAsync();

我得到以下结果:

-------------------------- 2226e2cc2af7d11c

内容 - 处置:表单数据; NAME = “XML”;文件名= “test.xml.gz” Content-Type:application / octet-stream

[GZip数据在这里......]

-------------------------- 2226e2cc2af7d11c

内容 - 处置:表单数据; NAME = “myId1”

123

-------------------------- 2226e2cc2af7d11c

内容 - 处置:表单数据; NAME = “myId2”

456 -------------------------- 2226e2cc2af7d11c -

这当然不是正确的GZip格式。然后我尝试使用以下代码将请求作为多部分请求处理:

var streamContent = new StreamContent(stream);
streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
var provider = await streamContent.ReadAsMultipartAsync();

但是,然后出现以下错误:

Invalid 'HttpContent' instance provided. It does not have a content type header starting with 'multipart/'

所以,我的问题是,如何从请求中的xml参数获取gzip数据?我需要保存gzip数据,然后解压缩并处理数据。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案是创建一个自定义的MultipartFormDataStreamProvider。

我在本文中找到了一个解决方案:Web API: how to access multipart form values when using MultipartMemoryStreamProvider?