ASP.NET Core 自定义解压缩提供程序

写在前面

在了解ASP.NET Core 自定义请求解压缩中间件的应用时,依据官方文档操作下来碰到了几个问题,这边做个记录。

关键点就是配置 Content-Encoding,参数需要和代码中添加的提供程序的Key保持一致;

builder.Services.AddRequestDecompression(options =>
{
    options.DecompressionProviders.Add("custom", new CustomDecompressionProvider());
});

比如,上面的代码段设置了Key 为 custom的自定义解压缩提供程序,在发起请求时的Headers中就必须包含 Content-Encoding = custom 的键值对,这样服务端才会得到匹配的依据,然后进入自定义的解压缩程序代码中。

Postman的请求头部信息配置如下: 

此外还有一个关键点,就是在处理请求流数据的时候,需要配置一下支持同步读流,否则会异步读取异常。

// 配置支持同步读流
builder.Services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
            .Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);

代码实现

using Microsoft.AspNetCore.RequestDecompression;
using Microsoft.AspNetCore.Server.Kestrel.Core;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRequestDecompression(options =>
{
    options.DecompressionProviders.Add("custom", new CustomDecompressionProvider());
});

// 配置支持同步读流
builder.Services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
            .Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);
 

var app = builder.Build();

app.UseRequestDecompression();

app.MapPost("/", (HttpRequest request) => Results.Stream(request.Body));

app.Run();

public class CustomDecompressionProvider : IDecompressionProvider
{
    public Stream GetDecompressionStream(Stream stream)
    {
        // 在这里添加自定的解压缩逻辑代码
        using (StreamReader reader = new StreamReader(stream))
        {
            // 异步读流
            var data = reader.ReadToEndAsync();
            Console.WriteLine(data.Result);
        }
        return stream;
    }
}

调用示例

 

由Postman发送的请求成功被服务端的自定义解压缩提供程序处理了。

相关推荐

  1. Linux下 定义多线程并发快速压缩压缩脚本

    2024-02-04 11:44:01       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-04 11:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-04 11:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-04 11:44:01       82 阅读
  4. Python语言-面向对象

    2024-02-04 11:44:01       91 阅读

热门阅读

  1. 【leetcode热题100】矩阵置零

    2024-02-04 11:44:01       38 阅读
  2. Keras中内置的预训练模型架构介绍

    2024-02-04 11:44:01       44 阅读
  3. 在ubuntu虚拟机中安装ros2-foxy

    2024-02-04 11:44:01       49 阅读
  4. 【常见的Web前端框架——详细介绍】

    2024-02-04 11:44:01       52 阅读
  5. C/C++的输入输出 | 简单易懂

    2024-02-04 11:44:01       44 阅读
  6. Rsnapshot备份服务器

    2024-02-04 11:44:01       44 阅读
  7. 数据库-计算机三级学习记录-4DBAS功能概要设计

    2024-02-04 11:44:01       44 阅读
  8. C语言中大小写字母的转化

    2024-02-04 11:44:01       41 阅读
  9. c语言大小写转换

    2024-02-04 11:44:01       46 阅读
  10. (c语言版)strlen和sizeof的区别

    2024-02-04 11:44:01       46 阅读