从 .NET Core 2.2 升级到 3.1 时无法禁用默认的 API 版本控制程序

Cannot disable the default API versioner when upgrading from .NET Core 2.2 to 3.1

我目前正在经历从 2.2 升级到 3.1 的过程。

在这样做时,.NET 的默认 api-versioner 是 运行 与我们的一样,尽管添加了代码来删除它:

是否有注册自定义版本器的新方法,或者是否有在调用 'AddApiVersioning'.

后删除 .NET 默认版本的新方法
        services.AddControllers(opts =>
        {
            opts.Filters.Add<DatedApiVersionFilter>();
        });

        // add standard asp.net core versioning mechanism
        services.AddApiVersioning(o =>
        {
            o.ApiVersionReader = new HeaderApiVersionReader(PlatformVersioningOptions.VersionHeaderName);
            o.DefaultApiVersion = new ApiVersionDate(2020, 1, 31);
            o.AssumeDefaultVersionWhenUnspecified = true;
        });

        // removing the default api version policy        
        services.Remove(services.Single(s => s.ImplementationType == typeof(DefaultApiVersionRoutePolicy)));
        services.TryAddEnumerable(ServiceDescriptor.Singleton<MatcherPolicy, DatedApiVersionMatcherPolicy>());
        services.AddSingleton<IDatedApiVersionResolver, DatedApiVersionResolver>();

我已经设法通过删除对 'services.AddApiVersioning()' 的调用来解决这个问题。

似乎在 .NET Core 3.1 中添加带有新 'AddControllers' 扩展的过滤器足以启动我们对任何装饰有过滤器的端点的版本控制策略。

最终实施:

        services.AddControllers(opts =>
        {
            opts.Filters.Add<DatedApiVersionFilter>();
        });

        services.TryAddEnumerable(ServiceDescriptor.Singleton<MatcherPolicy, DatedApiVersionMatcherPolicy>());
        services.AddSingleton<IDatedApiVersionResolver, DatedApiVersionResolver>();