我正在编写一个拥有这一个POST方法的.Net Web Api(2)。此方法目前通过使用标准JSON格式化程序对其唯一参数进行反序列化。我们也在编写客户端,使用System.Net.Http.HttpClient来使用这个Api和C#客户端进行通信。
有可能移动大量数据。这使我们考虑减少请求的占用空间。
搜索此网站后,我发现了一些使用gzip压缩的替代方案。我已经有了一个可靠的概念证明:
所以,我的问题......
我真的需要为此编写所有这些自定义代码吗?是否有内置的方法来降低请求的占用空间?
有些文章提及在IIS中启用gzip(或deflate)(请参阅Enable IIS7 gzip)。这对我不起作用(我启用它,我仍然在客户端进行压缩,从服务器中删除了DelegatingHandler ......但没有,我最终在控制器方法中使用了null参数)
答案 0 :(得分:1)
我最终实现了一个DelegatingHandler来查找ContentEncoding" gzip"并相应地解压缩。
using System;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace WebApi.MessageHandlers
{
/// <summary>
/// GZip message handler.
/// </summary>
public class GZipMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (IsRequestCompressed(request))
{
request.Content = Descompress(request.Content);
}
return base.SendAsync(request, cancellationToken);
}
private bool IsRequestCompressed(HttpRequestMessage request)
{
return request.Content.Headers.ContentEncoding.Contains("gzip", StringComparer.OrdinalIgnoreCase);
}
private HttpContent Descompress(HttpContent content)
{
// Handle compression...
throw new NotImplementedException();
}
}
}