gpt4 book ai didi

asp.net-core - 在 .Net Core Alpine 容器中使用 ServiceStack 解压缩请求

转载 作者:行者123 更新时间:2023-12-04 10:03:14 26 4
gpt4 key购买 nike

我正在构建一个容器化的微服务,它使用在 ASPNET Core Alpine docker 镜像上运行 .Net Core 的 ServiceStack。我希望能够在请求正文中接收包含 Gzipped JSON 的压缩请求,在请求到达 ServiceStack 之前对其进行解压缩,以便根据解压缩的 JSON 数据填充请求 DTO。

到目前为止,我已经尝试使用自己的中间件来执行此操作,但我的请求 DTO 仍然填充了 Null。我也尝试过使用 Anemonis.AspNetCore.RequestDecompression 中间件,结果相同。我现在想知道在 ServiceStack 收到请求之前是否没有调用中间件,甚至根本没有调用中间件。

使用 Anemonis 中间件,我的 Startup.cs 将中间件初始化为:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//...

app.UseRequestDecompression();

app.UseServiceStack(new AppHost
{
AppSettings = new NetCoreAppSettings(Configuration),
});

//...
}

使用 ConfigureServices 中提供的解压缩:
public new void ConfigureServices(IServiceCollection services)
{
//...

services.AddRequestDecompression(o =>
{
o.Providers.Add<DeflateDecompressionProvider>();
o.Providers.Add<GzipDecompressionProvider>();
o.Providers.Add<BrotliDecompressionProvider>();
});

//...
}

对于更多细节,ServiceStack 服务模型和接口(interface)照常:
[Route("/sample/full", "POST")]
public class SampleFull : IReturn<SampleResponse>
{
public long code { get; set; }
public SampleData[] data { get; set; }
}

public class SampleData
{
public string field1 { get; set; }
public string field2 { get; set; }
}

public class SampleService : Service
{
public object Post(SampleFull request)
{
try
{
// Do some processing

return new SampleResponse()
{
// Response details
}
}
catch (Exception ex)
{
return new SampleResponse()
{
// Error details
};
}
}
}

使用Postman测试,Content-Encoding = gzip,以gzip压缩文件作为请求体,当 Post(SampleFull request)被称为, request填充了两个 code 的空值和 data .

有没有人能够得到这个工作?我现在想我可能在 ASPNET Core Alpine 容器中缺少一个库/包。

最佳答案

回答我自己的问题,因为我终于找到了问题。事实证明,默认情况下,当您选择发送二进制文件作为请求正文时,Postman 将发送值为 application/octet-stream 的 Content-Type header 。默认情况下,此 header 是隐藏的,您无法覆盖它,但您可以禁用它并添加您自己的 Content-Type header ,其值为 application/json,然后允许 ServiceStack 正确填充它的请求 DTO。解决了。

关于asp.net-core - 在 .Net Core Alpine 容器中使用 ServiceStack 解压缩请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61725179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com