gpt4 book ai didi

asp.net-core - 如何在 Asp.net Core Web API 中为消息包内容类型启用 LZ4 压缩

转载 作者:行者123 更新时间:2023-12-04 17:40:36 24 4
gpt4 key购买 nike

我正在尝试在我正在处理的 .net Core Web API 项目上启用 MessagePack 内容类型。

经过一些研究,安装了这个 nuget打包并在启动文件中添加以下代码。很简单!现在我可以看到通过我的 API 提供的 msgpack 内容。

services.AddMvc().AddMessagePackFormatters(c => 
{
c.FormatterResolver = ContractlessStandardResolver.Instance;
c.SupportedContentTypes.Add("application/x-msgpack");
c.SupportedExtensions.Add("mp");
});

现在我想在其上应用 LZ4 压缩以减少负载大小,如 here 中所述.而且我找不到任何 nuget 包来添加此功能或找出插入 LZ4 压缩的方法。在一些博客中,我了解到 MessagePack 中内置了 LZ4 压缩。我不明白那是什么意思,而且关于这些东西的文档也很少。

我是这个压缩/解压方面的新手,所以非常感谢任何帮助。

谢谢

最佳答案

您必须编写自定义媒体类型格式化程序,因为压缩是在不同的模块中使用的。您必须使用 LZ4MessagePackSerializer 而不是 MessagePackSerializer。用法是一样的。此外,推荐的 MIME 类型是 application/msgpack

查看这个基本示例:

    public class MsgPackMediaTypeFormatter: BufferedMediaTypeFormatter
{
public MsgPackMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/msgpack"));
}

public override bool CanReadType(Type type)
{
return !type.IsAbstract && !type.IsInterface && type.IsPublic;
}

public override bool CanWriteType(Type type)
{
return !type.IsAbstract && !type.IsInterface && type.IsPublic;
}

public override object ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
return LZ4MessagePackSerializer.NonGeneric.Deserialize(type, readStream);
}

public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content)
{
LZ4MessagePackSerializer.NonGeneric.Serialize(type, writeStream, value, MessagePack.Resolvers.ContractlessStandardResolver.Instance);
}
}

关于asp.net-core - 如何在 Asp.net Core Web API 中为消息包内容类型启用 LZ4 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659546/

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