如何配置 Web API .Net 核心以接受二进制 JSON?

How do I configure Web API .Net core to accept Binary JSON?

在网络中API 2.1 我使用以下方式注册 BSON:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Formatters.Add(new BsonMediaTypeFormatter());
    }
}

我不确定如何注册格式化程序 .Net Core Web API。它似乎肯定会在 Startup.Configuration 中,但我对 Core 还是很陌生,不确定如何添加这种类型的格式化程序。

在 startup.cs 中看起来像这样,mvc 配置应该是这样的。

using WebApiContrib.Core.Formatter.Bson;

namespace MyApp
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
                .AddBsonSerializerFormatters();
        }
    }
}

对于任何使用 .NET Core 并通过 AddMvcCore() 使用 Mvc 的最小服务的人,AddBsonSerializerFormatters() 不会出现。我检查了GitHub上的项目(github.com/WebApiContrib/WebAPIContrib.Core)。只有为 IMvcBuilder 和 none 为 IMvcCoreBuilder 编写的扩展。作为解决方法,我编写了自己的扩展方法。希望对大家有帮助。

BuilderExtensions.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using System;
using WebApiContrib.Core.Formatter.Bson;

namespace ApiGateway.Extensions
{
    public static class BuilderExtensions
    {
        public static IMvcCoreBuilder AddBsonSerializerFormatters(this IMvcCoreBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.TryAddEnumerable(
                ServiceDescriptor.Transient<IConfigureOptions<MvcOptions>, MvcBsonSerializerOptionsSetup>());
            return builder;
        }
    }
}

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // ...

    // example usage 
    services.AddMvcCore()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddJsonFormatters().AddBsonSerializerFormatters()
            .AddApiExplorer();
    // ...
}