根据查询参数选择OutputFormatter

问题描述 投票:0回答:3

我需要根据查询参数选择

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());
c# .net-core asp.net-core-webapi .net-6.0
3个回答
0
投票

自定义输出格式化程序对您不起作用吗? 阅读此 ms 文档


0
投票

从评论中看来,真正的问题是,如果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");
        }
    }
}

这会影响所有路线


0
投票

邮递员实际上可以完成这项工作

© www.soinside.com 2019 - 2024. All rights reserved.