微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swagger版本控制-在satartup的document.basePath中设置v {version:apiVersion},而不是在控制器中设置Route属性

如何解决Swagger版本控制-在satartup的document.basePath中设置v {version:apiVersion},而不是在控制器中设置Route属性

最近,我遇到了一个小问题,我想解决一个关于为我的API之一生成api文档的问题。

我偶然发现的问题与Azure API管理正在阅读我的招摇的文档并在门户中自动设置API的方式有关。

详细地,我注意到,每次我更新涉及将更新的swagger文档导入门户网站的API时,我的基址都会消失,并且作为API作为我的多个版本的API的文档,会出现版本“前缀”在API管理的后缀而不是基本URL的一部分。

这反过来导致APIM URL中有多个版本标识符,而不是一个。 示例:

[WEB APP RESOURCE BASE URL]/v1/[Controller]/[Action]

将APIM转换为:

[APIM API BASE URL]/v1/v1/[Controller]/[Action]

我设法通过在“启动类”的“ PreSerrializefilters”中添加“主机”来解决基址消失的问题:

    app.UseSwagger(c =>
    {
        c.PreSerializefilters.Add((document,request) =>
        {
            document.Host = request.Host.Value;
            document.Paths = document.Paths.ToDictionary(p => p.Key.ToLowerInvariant(),p => p.Value);
        });
    });

下一步是通过向文件管理器添加“ basePath”属性,尝试将版本前缀从控制器中的Rout属性移动到启动类中的PreSerializefilters。

因此,从我的路线属性删除“ v {version:apiVersion}” ...

[ApiVersion("1.0")]
[ApiExplorerSettings(GroupName = "v1")]
[Route("v{version:apiVersion}/[controller]/[action]")]
[Produces("application/json","application/xml")]

导致...

[ApiVersion("1.0")]
[ApiExplorerSettings(GroupName = "v1")]
[Route("/[controller]/[action]")]
[Produces("application/json","application/xml")]

,然后在启动类的“ PreSerializefilters”中添加“ basePath”:

    app.UseSwagger(c =>
    {
        c.PreSerializefilters.Add((document,request) =>
        {
            document.Host = request.Host.Value;
            document.BasePath = "/" + document.Info.Version;
            document.Paths = document.Paths.ToDictionary(p => p.Key.ToLowerInvariant(),p => p.Value);
        });
    });

因此,在完成所有操作后,所有内容似乎都设置正确,但是当从招摇的门户网站和邮递员发送请求时,api似乎混淆了,或者完全无法正确路由请求,正如您在最后一个代码段中所看到的那样下图显示了“ v1”请求,尝试输入“ v2”操作并失败,导致未找到“ 404”:

enter image description here

有人知道如何正确设置吗?

有关我使用的更多信息是:

  • .Net Core 2.1
  • Swashbuckle.AspNetCore.Swagger(4.0.1)
  • Swashbuckle.AspNetCore.Annotations(4.0.1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。