11

使用属性路由时是否可以在 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。

4

2 回答 2

20
.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");
        }
        ))
于 2015-06-11T19:39:10.380 回答
-3

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}.");
    }

参考:

于 2019-06-28T11:38:54.607 回答