进行内容协商时未使用SupportedMediaTypes
本文关键字:未使用 SupportedMediaTypes 内容协商 | 更新日期: 2023-09-27 18:21:07
我创建了一个新的格式化程序来处理内容协商。
public TiffImageFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/tiff"));
}
public override bool CanReadType(Type type)
{
return type == typeof(byte[]);
}
public override bool CanWriteType(Type type)
{
return type == typeof(byte[]);
}
但是当运行时
var negotiator = Configuration.Services.GetContentNegotiator();
var type = negotiator.Negotiate(typeof(byte[]), Request, Configuration.Formatters);
不考虑支持的媒体类型,而是"CanWritetype"是决定使用哪种接受类型的唯一条件。
接受:image/*、image/png、image/tiff、*/*应该会产生image/tiff,但是Accept:image/png应返回null,允许我发送不可接受的内容。
如何确定哪种媒体类型正确?
您需要使用MediaTypeFormatter.MediaTypeMappings
并添加相关的Accept
标头:
public TiffImageFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/tiff"));
MediaTypeMappings.Add(
new RequestHeaderMapping("Accept", "image'tiff",
StringComparison.OrdinalIgnoreCase,
false, "image'tiff"));
}
如果您需要任何进一步的信息,这篇博客文章将解释媒体类型匹配的算法。