作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我正在处理的 .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/
我是一名优秀的程序员,十分优秀!