将支持的标头类型添加到JsonOutputFormatter

时间:2017-03-10 02:59:01

标签: json asp.net-core-mvc .net-core content-type

我的公司在内部apis等中使用标准格式的健康检查回复。如果我们遇到问题,我们要么在成功时返回内容类型application/status+json,要么application/problem+json返回状态(406的一部分3}})。

但是如果我将内容类型设置为其中任何一个,我的响应就会成为emptu SupportedMediaTypes响应。

那么,我如何告诉JsonOutputFormatter它可以将这些Json头类型添加到它的services.AddMvc().AddJsonOptions(jsonOptions => { jsonOptions.SerializerSettings.SupportedMediaTypes.Add("application/problem+json"); }); 集合中?

我希望我可以这样做:

$im = new imagick( 'test.pdf' );
$page_count = count($im);

但我当然无法找到办法。

1 个答案:

答案 0 :(得分:1)

好的,所以这是一种方法。我找到了OutputFormatters集合,并且能够取出JsonOutputFormatter。从那里,您可以添加支持的媒体类型:

        services.AddMvc(mvcOptions => {
            //TODO: make extension method 
            var jFormatter = mvcOptions.OutputFormatters.FirstOrDefault(f => f.GetType() == typeof(JsonOutputFormatter)) as JsonOutputFormatter;
            jFormatter?.SupportedMediaTypes.Add("application/problem+json");
            jFormatter?.SupportedMediaTypes.Add("application/status+json");
        });

或者,作为扩展方法:

    public static IMvcBuilder AddStatusJsonSupport(this IMvcBuilder builder) {
        builder.AddMvcOptions(options => {
            var jFormatter = options.OutputFormatters.FirstOrDefault(f => f.GetType() == typeof(JsonOutputFormatter)) as JsonOutputFormatter;
            jFormatter?.SupportedMediaTypes.Add("application/problem+json");
            jFormatter?.SupportedMediaTypes.Add("application/status+json");
        });
        return builder;
    }

这样称呼:

services.AddMvc().AddStatusJsonSupport();