参考 Correct way to compress webapi POST
using (var handler = new HttpClientHandler())
{
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (var client = new HttpClient(handler, false))
{
string json = JsonConvert.SerializeObject(people);
byte[] jsonBytes = Encoding.UTF8.GetBytes(json);
var ms = new MemoryStream();
using (var gzip = new GZipStream(ms, CompressionMode.Compress, true))
{
gzip.Write(jsonBytes, 0, jsonBytes.Length);
}
ms.Position = 0;
var content = new StreamContent(ms);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
content.Headers.ContentEncoding.Add("gzip");
var response = await client.PostAsync("http://localhost:54425/api/Gzipping", content);
var results = await response.Content.ReadAsAsync<IEnumerable<PersonModel>>();
}
}
谢谢的你回复,对我很有帮助;
请问下:服务器端该如何接收收Post请求过来的数据?
[HttpPost]
// POST api/<controller>
public string AddPersonList([FromBody]List<Person> personList)
{
return "Ok";
}
我试了这种方式拿不到gzip压缩后的数据! 可否在指点一下
@Coding_Yong: 参考 ASP.NET Web API Compression ,github 上的对应代码:Fabrik.Common.WebAPI
@dudu: 赞
1.在nuget上安装一些压缩的库,gzip,zip都行。
2.对数据进行压缩。一般会获得一个压缩的内容的流,可能是一个file stream或者memory stream
3.将流读取到byte[],因为在网络上传输流一般都是通过byte[]来体现的。
4.用webClient类的upload方法上传文件,upload方法的参数中有byte[]
其实就是上传文件