进行内容协商时不使用 SupportedMediaTypes
SupportedMediaTypes not used when doing content negotiation
我创建了一个新的格式化程序来处理内容协商。
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/png、image/tiff、*/* 应该导致 image/tiff 但是
接受:image/png 应该 return 为 null 允许我发送不可接受。
如何确定哪种媒体类型正确?
您需要使用MediaTypeFormatter.MediaTypeMappings
并添加相关的Accept
headers:
public TiffImageFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/tiff"));
MediaTypeMappings.Add(
new RequestHeaderMapping("Accept", "image\tiff",
StringComparison.OrdinalIgnoreCase,
false, "image\tiff"));
}
此 blog post 解释了媒体类型匹配的算法,如果您需要任何进一步的信息。
我创建了一个新的格式化程序来处理内容协商。
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/png、image/tiff、*/* 应该导致 image/tiff 但是 接受:image/png 应该 return 为 null 允许我发送不可接受。
如何确定哪种媒体类型正确?
您需要使用MediaTypeFormatter.MediaTypeMappings
并添加相关的Accept
headers:
public TiffImageFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/tiff"));
MediaTypeMappings.Add(
new RequestHeaderMapping("Accept", "image\tiff",
StringComparison.OrdinalIgnoreCase,
false, "image\tiff"));
}
此 blog post 解释了媒体类型匹配的算法,如果您需要任何进一步的信息。