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

时间:2017-02-22 17:16:06

标签: json asp.net-web-api asp.net-core bson

在Web 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的新手,不知道如何添加这种类型的格式化程序。

2 个答案:

答案 0 :(得分:5)

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

using WebApiContrib.Core.Formatter.Bson;

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

答案 1 :(得分:0)

对于使用.NET Core并使用带有AddMvcCore()的Mvc最小服务的任何人,都不会显示AddBsonSerializerFormatters()。我在GitHub(github.com/WebApiContrib/WebAPIContrib.Core)上检查了项目。只有为IMvcBuilder编写的扩展名,而没有为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();
    // ...
}