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

How to receive a GZIP post request in a Web API?

我正在尝试使用 Web API 从数据提供商处接收 post。

当我使用以下函数从我的网站 api 保存请求时:

public async Task<HttpResponseMessage> Import(HttpRequestMessage request)

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

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

我得到以下结果:

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

内容配置:表单数据;名字="xml";文件名="test.xml.gz" 内容类型:application/octet-stream

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

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

内容配置:表单数据;姓名="myId1"

123

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

内容配置:表单数据;名字="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 数据,然后解压缩并处理数据。

谢谢!

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

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