【发布时间】:2017-07-02 11:17:07
【问题描述】:
我从事 REST MVC 项目。并调查 API 项目的版本控制。
请求被发送到一个单独的 ASP.NET MVC 项目,然后发送到另一个单独的项目,客户端代理。最后,客户端代理将请求流向 API 项目(ASP.Net Core)。
版本控制将放在 API 项目中。
我已经在我的一个 API 上实现了快速版本控制,并且工作正常。但我的做法是我的问题。我在“客户端代理”项目的请求 URL 中硬编码了实际版本 (v1.0)。我需要知道我应该在哪里指定 API 所需的版本?我的意思是它必须来自客户端(也许是javascript)。请指教。
我已经实现了路由约定,所以路由总是基于这个:
"api/v{version:apiVersion}/controller"
但我仍然不知道,如何在它到达我的客户端代理项目之前指定版本。
下面是我的路由约定类:
public class RouteConvention : IApplicationModelConvention
{
//private readonly AttributeRouteModel _centralPrefix;
private readonly string _versionConstraintTemplate;
private readonly string _versionedControllerTemplate;
public RouteConvention() //IRouteTemplateProvider routeTemplateProvider
{
//_centralPrefix = new AttributeRouteModel(routeTemplateProvider);
_versionConstraintTemplate = "v{version:apiVersion}";
_versionedControllerTemplate = $"{_versionConstraintTemplate}/[controller]";
}
public void Apply(ApplicationModel application)
{
foreach (var applicationController in application.Controllers)
{
foreach (var applicationControllerSelector in applicationController.Selectors)
{
if (applicationControllerSelector.AttributeRouteModel != null)
{
var versionedConstraintRouteModel = new AttributeRouteModel
{
Template = _versionConstraintTemplate
};
applicationControllerSelector.AttributeRouteModel =
AttributeRouteModel.CombineAttributeRouteModel(versionedConstraintRouteModel,
applicationControllerSelector.AttributeRouteModel);
}
else
{
applicationControllerSelector.AttributeRouteModel = new AttributeRouteModel
{
Template = _versionedControllerTemplate
};
}
}
}
}
}
请指教
【问题讨论】:
标签: asp.net restful-url