如何使用请求减压在ASP。网络核心7

利用请求减压中间件在ASP。网络核心7to enable your API endpoints to accept requests that contain compressed content.

  • 在Facebook上分享
  • 在Twitter上分享
  • 分享在LinkedIn
  • 在Reddit分享
  • 通过电子邮件分享
  • 印刷资源
时髦的年轻人炸毁蓝色气球
思想库

最小的api在ASP。网络核心allow you to easily create RESTful APIs with minimal code and configuration. No matter what type of API we build, it is always important to minimize the amount of data transferred over the network, which saves bandwidth and improves the responsiveness of the app. We do this by compressing the payloads of both requests and responses.

当然,这意味着我们必须解压缩载荷在另一端。在ASP。网络核心7,请求减压开箱即用的支持:您现在可以使用新请求减压中间件,使您的API端点接受压缩数据的请求。

本文讨论如何处理请求压缩和解压缩在ASP。网络核心7最小的api。(注意,我们进行了讨论响应压缩在ASP。网络核心在前一篇文章)。使用本文中提供的代码示例,您应该Visual Studio 2022安装在您的系统。如果你不已经有一个副本,你可以在这里下载Visual Studio 2022

创建一个ASP。网络核心7Minimal Web API project in Visual Studio 2022

首先,让我们创建一个ASP。网络核心7project in Visual Studio 2022 Preview. Follow these steps:

  1. 启动Visual Studio 2022 IDE。
  2. 点击“创建新项目。”
  3. 在“创建新项目”窗口中,选择“ASP。网络核心Web API” from the list of templates displayed.
  4. 单击Next。
  5. 在“配置您的新项目”窗口中,指定新项目的名称和位置。
  6. (可选)检查“解决方案和项目在同一个目录”复选框,根据您的喜好。
  7. 单击Next。
  8. 接下来,所示的“其他信息”窗口中选择“网络7.0(当前)”作为框架和取消选中该复选框,表示“使用控制器…”在这个例子中我们将使用最小的api。离开“验证类型”设置为“无”(默认)。
  9. 确保复选框“使码头工人”,“为HTTPS,配置”和“启用开放API支持”。我们不会使用这些特性。
  10. 单击Create。

我们将使用ASP。网络核心7Web API project to create a minimal API and implement request compression and decompression in the sections below.

请求减压中间件在ASP。网络核心7

ASP。网络核心7包含了一个新的请求减压中间件,允许端点接受请求压缩的内容。这消除了需要编写代码显式减压与压缩内容请求。

内容编码HTTP头用于识别和解压压缩内容HTTP请求。在回应一个HTTP请求匹配内容编码头价值,请求中间件封装了HttpRequest减压。身体在一个适当的减压流使用匹配的供应商。

这是紧随其后的内容编码头,这表明请求主体不再是压缩。注意,请求减压中间件忽略请求内容编码标头。

换名话说,当一个HTTP请求的内容编码头的值匹配任何可用的减压提供商那里请求减压中间件利用匹配的供应商包装请求的身体在一个适当的减压流和删除内容编码头表明请求主体不再是压缩。

请求的特性减压中间件在ASP。网络核心7一瞥:

  • 它使API端点接受请求包含压缩数据。
  • 它利用内容编码HTTP头有关的数据确定和解压压缩内容的请求。
  • 它消除了需要编写任何代码来处理减压包含压缩数据的请求。

减压提供商默认支持包括Brotli、缩小,GZip。默认的减压提供者和给出相应的内容编码标头值如下:

压缩供应商

头的值

Brotli

br

缩小

缩小

Gzip

gzip

显然,所有这些压缩响应压缩中间件提供商支持的ASP。网络核心7。您可以利用请求减压中间件在ASP。网络核心7using the UseRequestDecompression extension method, which extends the IApplicationBuilder interface, and by calling the AddRequestDecompression extension method on the IServiceCollection interface.

在ASP中启用请求减压中间件。网络核心7

下面的代码片段说明了如何启用请求减压为默认内容编码类型。

var builder = WebApplication.CreateBuilder (args);builder.Services.AddRequestDecompression ();应用var = builder.Build ();app.UseRequestDecompression ();app.MapPost (“/”(HttpRequest HttpRequest) = > Results.Stream (httpRequest.Body));app.Run ();

请求大小限制

防止“zip炸弹”或减压炸弹,解压数据的最大大小限于请求主体的大小。如果解压内容大小超过这个极限,抛出InvalidOperationException。

Zip炸弹,也称为减压炸弹,是恶意文件,包含大量的高度压缩数据。提取或解压zip炸弹极大地扩大,消耗大量的内存和磁盘空间和可能导致拒绝服务(DoS)攻击。

创建一个定制的减压提供者在ASP。网络核心7

支持自定义编码,你可以创建自己的减压提供者在ASP。网络核心7最小的api。要做到这一点,你应该创建一个类,实现了IDecompressionProvider接口如下所示。

公开课CustomDecompressionProvider: IDecompressionProvider{公共流GetDecompressionStream(流流){/ /编写代码来减压返回流;}}

你应该注册和配置您的自定义减压提供者程序中。cs文件使用以下代码。

var builder = WebApplication.CreateBuilder (args);builder.Services。= > {options.DecompressionProviders AddRequestDecompression(选项。添加(“mycustomdecompressionprovider”,新CustomDecompressionProvider ());});应用var = builder.Build ();app.UseRequestDecompression ();app.MapPost (“/”(HttpRequest请求)= > Results.Stream (request.Body));app.Run ();

我没有实现的逻辑定义压缩和解压缩。我很快就会证明这在后续文章中。

如果请求减压中间件无法解压压缩内容的请求,将请求转发到下一个委托。每当请求包含一个不支持的内容编码标头值,或包含多个内容编码标头值,它将转发到随后的委托。Brotli, GZip,缩小将抛出一个异常与适当的错误消息,声称不支持的压缩方法。

版权©2023 IDG通信公司。

奖2023年信息世界的技术。现在打开条目!