首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为通用控制器添加文档和操作

为通用控制器添加文档和操作
EN

Stack Overflow用户
提问于 2018-12-13 13:14:03
回答 1查看 2K关注 0票数 1

我正在开发一个带有插件的webapi。当插件被添加时,我想更新swagger文档。当我不使用版本的时候我可以处理这件事。所有方法都添加到swagger文档中。

但是当api打开了api版本时,新版本swagger文档的生成就失败了。它返回404。

我需要做些什么才能使版本控制工作并获得动态控制器函数.

代码语言:javascript
运行
复制
 private string AddSwaggerVersionDocument(PluginMetadata metadata)
        {

            var version = metadata.Version.ToApiVersion();

            if (SwaggerElements.GeneratorOptions.SwaggerGeneratorOptions.SwaggerDocs.ContainsKey(version) == false)
            {
                SwaggerElements.GeneratorOptions.SwaggerDoc(version, new Info
                {

                    Title = "webapi API",
                    Version = $"{version}",
                    Description = "Web API demo",
                    TermsOfService = "None",
                    Contact = new Contact
                    {
                        Name = "Frans van Ek",
                        Email = string.Empty,
                        Url = "https://fransvanek.nl"
                    },
                    License = new License
                    {
                        Name = "Use under LICX",
                        Url = "https://fransvanek.nl"
                    }
                });

                 SwaggerElements.UIOptions.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"My API : {version}");
            }
            return version;
        } 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-03 19:05:25

我现在明白了。您正在使用自己的版本控制机制,并按需生成Swagger文档。斯巴什巴克尔期望一切都是预先定义的。这是合理的,因为支持的版本在应用程序开始时应该是确定性的。如果您的应用程序是完全动态的,那么您的当前解决方案就可以工作,但是不同的调用会有所不同。如果提前发现并加载插件,那么您可以注册一个IConfigureOptions<SwaggerGenOptions>,它可以使用您的插件信息配置Swashbuckle。类似于:

代码语言:javascript
运行
复制
public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
{
    readonly IApiDescriptionGroupCollectionProvider provider;

    public ConfigureSwaggerOptions(
        IApiDescriptionGroupCollectionProvider  provider ) => this.provider = provider;

    public void Configure( SwaggerGenOptions options )
    {
        // TODO: configure swashbuckler with plug-in information
    }
}

然后将其注册到服务容器中:

代码语言:javascript
运行
复制
services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();

我希望这能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53762697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档