我需要根据查询参数选择
OutputFormatter
。怎么做呢?
我要从 .NET Framework WebApi
转到 .NET Core WebApi.
.NET Framework WebApi
有 DefaultContentNegotiator
班这样做:
public class CustomContentNegotiator : DefaultContentNegotiator
{
public override ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
//Read query from request object and add output formatters below
bindFormatters = new List<MediaTypeFormatter>
{
new ConvertResultRawFormatter(),
new JsonMediaTypeFormatter
{
SerializerSettings =
{
NullValueHandling = NullValueHandling.Ignore
}
}
};
}
return base.Negotiate(type, request, bindFormatters);
}
}
用新格式化的谈判器替换配置
config.Services.Replace(typeof(IContentNegotiator), new CustomContentNegotiator());
自定义输出格式化程序对您不起作用吗? 阅读此 ms 文档
从评论中看来,真正的问题是,如果URL包含
Content-Disposition: inline
参数,如何添加download=inline
标头。这不涉及格式或内容协商。
有多种方法可以向响应添加标头。其中之一是添加内联中间件,如果存在查询参数,该中间件会添加标头:
app.Use(async (context, next) =>
{
context.Response.OnStarting(() =>
{
var download= context.Request.Query["download"];
if (download=="inline")
{
context.Response.Headers.Add("Content-Disposition", "inline");
}
}
}
这会影响所有路线
邮递员实际上可以完成这项工作