当使用利用ASP.Net Core Web API的RESTful服务时,CPU的易用性和网络带宽的不足可能是使用内容压缩的一个很好的理由。 内容压缩可减少带宽消耗并促进更快的响应。 因此,您可以利用ASP.Net Core中的响应压缩中间件来提高应用程序的性能。
.Net Core有许多可用的响应压缩框架。 Brotli是一种相对较新的压缩算法,与Gzip或Deflate相比,压缩算法提供了改进的压缩结果,大多数现代网络浏览器(包括Google Chrome,Mozilla Firefox,Opera和Microsoft Edge)都支持Brotli。 本文讨论了如何在ASP.Net Core中使用Brotli。
ASP.Net Core中Brotli入门
您需要做的第一件事是在Visual Studio中创建一个新的ASP.Net Core项目。 您还应该确保在系统中安装了最新版本的.Net Core。 在撰写本文时,最新版本是.Net Core 2.1。 接下来,请按照以下步骤在Visual Studio中创建ASP.Net Core应用程序。
- 在Visual Studio IDE中,单击“文件”>“新建”>“项目”。
- 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
- 指定项目的名称。
- 单击确定保存。
- 接下来,在“新的.Net Core Web应用程序…”窗口中,选择“ API”。
- 指定“ ASP.NET Core 2.1”作为要使用的ASP.Net Core运行时的版本。
- 取消选中“启用Docker支持”,“配置HTTPS”和“无身份验证”复选框。 我们将不需要这些功能。
- 单击确定。
结果应该是一个新的ASP.Net Core项目,并带有一个示例控制器来构建和执行RESTful HTTP服务。
在ASP.Net Core中实现响应压缩提供程序
客户端使用Accept-Encoding标头来限制响应中的编码类型。 ASP.Net Core中的响应压缩中间件检查请求标头,以查看是否有压缩提供程序可用于处理一种可接受的编码。 默认情况下,ASP.Net Core响应压缩中间件使用Gzip压缩,但是您可以覆盖此行为以使用自定义中间件。 在本节中,我们将探讨如何使用Brotli构建自定义压缩提供程序。
要开始在ASP.Net Core项目中使用Brotli,请通过NuGet程序包管理器安装Brotli.Net NuGet程序包。 现在,创建一个名为CustomCompressionProvider的类,该类扩展ICompressionProvider接口并实现CreateStream方法,如下所示。
public class CustomCompressionProvider : ICompressionProvider
{
public string EncodingName => “br”;
public bool SupportsFlush => true;
public Stream CreateStream(Stream outputStream)
{
return new BrotliStream(outputStream,
CompressionLevel.Fastest, false);
}
}
请注意CompressionLevel.Fastest的用法,以确保最佳速度。 其他可能的值是CompressionLevel.NoCompression和CompressionLevel.Optimal。 前者将禁用压缩,而后者将提供最大压缩。 自然地,总是在压缩级别和压缩内容所花费的时间之间进行权衡。
在ASP.Net Core中配置响应压缩
要将Brotli配置为与ASP.Net Core应用程序一起使用,您需要利用Startup类。 此类有两种方法,Configure和ConfigureServices。 以下代码段说明了如何打开响应压缩。
public void Configure(IApplicationBuilder app)
{
app.UseResponseCompression();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
接下来,您应该指定要使用的响应压缩中间件。 就是这样。
services.AddResponseCompression(options =>
{
options.Providers.Add(new CustomCompressionProvider());
});
以下是Startup类的完整代码列表,供您参考。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddResponseCompression(options =>
{
options.Providers.Add(new CustomCompressionProvider());
});
}
public void Configure(IApplicationBuilder app)
{
app.UseResponseCompression();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
}
就是这样。 现在,当您运行ASP.Net Core Web API服务时,您将看到响应已压缩。
ASP.Not Core中的响应压缩中间件提供了一种使用自定义压缩算法压缩响应的优雅方法。 Brotli不仅可以提供比Gzip好的约20%的压缩,而且在解压缩内容方面也快约20倍。