3

我目前正在经历从 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>();
4

1 回答 1

1

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

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

最终实现:

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

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

于 2020-09-30T09:04:02.450 回答