bil*_*-io 17 .net asp.net-web-api asp.net-core-mvc api-versioning asp.net-core
我试图在REST API上启用版本控制,其中版本在标题中指定为"api-version":2.
根据这个教程,我只需要创建
VersionConstraint : IHttpRouteConstraint
和
VersionedRoute: RouteFactoryAttribute
用法是将[VersionedRoute("api/controllerName", 2)]属性应用于控制器,这是为特定版本设计的(例如,在这种情况下为版本2).
这一切都很好,但不幸的是,它全部在MVC5中,而我正在使用MVC6.因此,RouteFactoryAttribute并IHttpRouteConstraint不能正常工作.
我设法找到IRouteConstraint替换IHttpRouteConstraint(希望它可以工作),但我找不到替代品RouteFactoryAttribute.
如果有人可以使用MVC 6提供这样的示例,或者至少提到正确的类(理想情况下使用命名空间),我需要继承吗?
Max*_*ler 10
这是您需要的最少工作量.
首先,去那里复制以下3个文件的代码:
一旦你有了这个,我们将改变以下GetVersion方法VersionRangeValidator:
public static string GetVersion(HttpRequest request)
{
if (!string.IsNullOrWhiteSpace(request.Headers["api-version"]))
return request.Headers["api-version"];
return "1";
}
Run Code Online (Sandbox Code Playgroud)
这将读取标头并返回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";
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在你只需要给它正确的标题,它就是好的.这段代码已经使用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);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3971 次 |
| 最近记录: |