通过属性版本控制在 Swagger 中利用 MultipleApiVersions
Leverage MultipleApiVersions in Swagger with attribute versioning
使用属性路由时是否可以在 Swagger UI / Swashbuckle 中利用 MultipleApiVersions?
具体来说,我通过以下方式实现了版本控制:
using System.Web.Http;
namespace RESTServices.Controllers.v1
{
[Route("api/v1/Test")]
public class TestV1Controller : ApiController
{ ... }
版本 2 将位于 v2 命名空间中。在名为 TestV2Controller 的控制器中。该路线将包含 v2。
是否可以传递允许这样做的 lambda?我在网上找到了一个经过编译的 lambda 示例,但随后 Swagger 完全停止工作。无法命中断点或在浏览器中看到 Swagger。
.EnableSwagger(c => c.MultipleApiVersions(
(apiDesc, version) =>
{
var path = apiDesc.RelativePath.Split('/');
var pathVersion = path[1];
return CultureInfo.InvariantCulture.CompareInfo.IndexOf(pathVersion, version, CompareOptions.IgnoreCase) >= 0;
},
vc =>
{
vc.Version("v2", "Swashbuckle Dummy API V2"); //add this line when v2 is released
// ReSharper disable once ConvertToLambdaExpression
vc.Version("v1", "Swashbuckle Dummy API V1");
}
))
Swagger 支持多个版本。
配置 URL 以便 Swagger 可以正确指定版本。
httpConfiguration
.EnableSwagger(c =>
{
c.MultipleApiVersions(
(apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
(vc) =>
{
vc.Version("v2", "Swashbuckle Dummy API V2");
vc.Version("v1", "Swashbuckle Dummy API V1");
});
});
.EnableSwaggerUi(c =>
{
c.EnableDiscoveryUrlSelector();
});
private static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
{
return apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName.Contains($"{targetApiVersion}.");
}
参考文献:
使用属性路由时是否可以在 Swagger UI / Swashbuckle 中利用 MultipleApiVersions?
具体来说,我通过以下方式实现了版本控制:
using System.Web.Http;
namespace RESTServices.Controllers.v1
{
[Route("api/v1/Test")]
public class TestV1Controller : ApiController
{ ... }
版本 2 将位于 v2 命名空间中。在名为 TestV2Controller 的控制器中。该路线将包含 v2。
是否可以传递允许这样做的 lambda?我在网上找到了一个经过编译的 lambda 示例,但随后 Swagger 完全停止工作。无法命中断点或在浏览器中看到 Swagger。
.EnableSwagger(c => c.MultipleApiVersions(
(apiDesc, version) =>
{
var path = apiDesc.RelativePath.Split('/');
var pathVersion = path[1];
return CultureInfo.InvariantCulture.CompareInfo.IndexOf(pathVersion, version, CompareOptions.IgnoreCase) >= 0;
},
vc =>
{
vc.Version("v2", "Swashbuckle Dummy API V2"); //add this line when v2 is released
// ReSharper disable once ConvertToLambdaExpression
vc.Version("v1", "Swashbuckle Dummy API V1");
}
))
Swagger 支持多个版本。 配置 URL 以便 Swagger 可以正确指定版本。
httpConfiguration
.EnableSwagger(c =>
{
c.MultipleApiVersions(
(apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
(vc) =>
{
vc.Version("v2", "Swashbuckle Dummy API V2");
vc.Version("v1", "Swashbuckle Dummy API V1");
});
});
.EnableSwaggerUi(c =>
{
c.EnableDiscoveryUrlSelector();
});
private static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
{
return apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName.Contains($"{targetApiVersion}.");
}
参考文献: