I'm currently going through the process of upgrading from 2.2 to 3.1.
In doing so .NET's default api-versioner is running along side ours despite adding the code to remove this:
Is there a new way to register a custom versioner or is there a new approach to removing .NET's default one after calling 'AddApiVersioning'.
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>();
I've managed to solve this by removing the call to 'services.AddApiVersioning()'.
It seems in .NET Core 3.1 adding the filter with the new 'AddControllers' extension is enough to kick off our versioning policy for any endpoint decorated with the filter.
Final implementation: