MVC6 的 VersionedRoute 属性实现
VersionedRoute Attribute Implementation for MVC6
我正在尝试在 REST API 上启用版本控制,其中版本在 header 中指定为 "api-version":2
。
根据this tutorial我只需要创建
VersionConstraint : IHttpRouteConstraint
和
VersionedRoute: RouteFactoryAttribute
用法是将 [VersionedRoute("api/controllerName", 2)]
属性应用于专为特定版本设计的控制器(例如本例中的版本 2)。
一切都很好,但不幸的是,这一切都在 MVC5 中,而我正在使用 MVC6。因此,RouteFactoryAttribute
和 IHttpRouteConstraint
不起作用。
我设法找到了 IRouteConstraint
来替换 IHttpRouteConstraint
(希望它会起作用),但我找不到 RouteFactoryAttribute
的替代品。
如果有人可以提供使用 MVC 6 的示例,或者至少提及我需要继承的正确 类(最好使用命名空间)?
这是您需要的最少工作量。
首先,转到 there 并复制以下 3 个文件的代码:
一旦你有了这个,我们将更改 VersionRangeValidator
的 GetVersion
方法如下:
public static string GetVersion(HttpRequest request)
{
if (!string.IsNullOrWhiteSpace(request.Headers["api-version"]))
return request.Headers["api-version"];
return "1";
}
这将读取 header 和 return 的 API 版本。在这种情况下,默认值为 v1
。
以下是如何在控制器上使用它(或者它可以是具有 2 个操作的相同控制器:
[Route("api/data")]
public class DataController
{
[VersionGet("", versionRange: "[1]")]
public string GetData()
{
return "v1 data";
}
}
[Route("api/data")]
public class DataV2Controller
{
[VersionGet("", versionRange: "[2]")]
public string GetData()
{
return "v2 data";
}
}
所以现在你只需要给它正确的 header 就可以了。此代码已通过 jQuery 测试,如下所示:
$(document).ready(function(){
$.ajax({url: '/api/Data/', headers: { 'api-version': 1 }})
.then(function(data){
alert(data);
});
$.ajax({url: '/api/Data/', headers: { 'api-version': 2 }})
.then(function(data){
alert(data);
});
});
我正在尝试在 REST API 上启用版本控制,其中版本在 header 中指定为 "api-version":2
。
根据this tutorial我只需要创建
VersionConstraint : IHttpRouteConstraint
和
VersionedRoute: RouteFactoryAttribute
用法是将 [VersionedRoute("api/controllerName", 2)]
属性应用于专为特定版本设计的控制器(例如本例中的版本 2)。
一切都很好,但不幸的是,这一切都在 MVC5 中,而我正在使用 MVC6。因此,RouteFactoryAttribute
和 IHttpRouteConstraint
不起作用。
我设法找到了 IRouteConstraint
来替换 IHttpRouteConstraint
(希望它会起作用),但我找不到 RouteFactoryAttribute
的替代品。
如果有人可以提供使用 MVC 6 的示例,或者至少提及我需要继承的正确 类(最好使用命名空间)?
这是您需要的最少工作量。
首先,转到 there 并复制以下 3 个文件的代码:
一旦你有了这个,我们将更改 VersionRangeValidator
的 GetVersion
方法如下:
public static string GetVersion(HttpRequest request)
{
if (!string.IsNullOrWhiteSpace(request.Headers["api-version"]))
return request.Headers["api-version"];
return "1";
}
这将读取 header 和 return 的 API 版本。在这种情况下,默认值为 v1
。
以下是如何在控制器上使用它(或者它可以是具有 2 个操作的相同控制器:
[Route("api/data")]
public class DataController
{
[VersionGet("", versionRange: "[1]")]
public string GetData()
{
return "v1 data";
}
}
[Route("api/data")]
public class DataV2Controller
{
[VersionGet("", versionRange: "[2]")]
public string GetData()
{
return "v2 data";
}
}
所以现在你只需要给它正确的 header 就可以了。此代码已通过 jQuery 测试,如下所示:
$(document).ready(function(){
$.ajax({url: '/api/Data/', headers: { 'api-version': 1 }})
.then(function(data){
alert(data);
});
$.ajax({url: '/api/Data/', headers: { 'api-version': 2 }})
.then(function(data){
alert(data);
});
});