I am trying to enable versioning on a REST API, where the version is specified in the header, as "api-version":2
.
According to this tutorial I just need to create
VersionConstraint : IHttpRouteConstraint
and
VersionedRoute: RouteFactoryAttribute
The usage would be to apply the [VersionedRoute("api/controllerName", 2)]
Attribute to Controllers, which are designed for specific versions (e.g. version 2 in this case).
This is all good and well, but unfortunately, it's all in MVC5 and I'm using MVC6. Therefore, RouteFactoryAttribute
and IHttpRouteConstraint
don't work.
I managed to find IRouteConstraint
to replace IHttpRouteConstraint
(hoping it will work), but I cannot find a replacement for RouteFactoryAttribute
.
If anyone can provide a sample of this using MVC 6, or at least mention the correct classes (ideally with namespaces) I need to inherit from?
Here's the minimum amount of work you need.
First, go there and copy the code for the 3 following files:
VersionGetAttribute
VersionRangeValidator
VersionRoute.cs
Once you have this, we'll change the
GetVersion
method ofVersionRangeValidator
for the following:That will read the header and return the API version. The default will be
v1
in this scenario.Here's how to use it on controllers (or it can be the same controllers with 2 actions:
So now you just need to give it the right header and it's good. This code has been tested with jQuery like this: