首页 > 解决方案 > NSwag 中的条件运算处理器

问题描述

我尝试OperationProcessor在 NSwag 中有条件地添加一个。例如,DefaultApiValueOperationProcessor只有在我们处于开发环境中时才应该添加/启用 ( env.IsDevelopment)

不幸的是,我无法检索IHostingEnvironmentConfigureServices也无法打开 Swagger OperationProcessorsConfigure请参阅注释行中的代码示例:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSwaggerDocument(s =>
        {
            // can't get IHostingEnvironment here? (for env.IsDevelopment())

            s.OperationProcessors.Add(new DefaultApiValueOperationProcessor("version", "1"));
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // can't get Swagger's OperationProcessors here?

        app.UseOpenApi();
        app.UseSwaggerUi3(o =>
        {
            o.DocExpansion = "list";
            o.DocumentTitle = "My API";
        });

        app.UseMvc();
    }
}

知道如何解决这个问题吗?

标签: c#asp.net-coreswaggerasp.net-core-webapinswag

解决方案


要从 访问 Web 主机环境ConfigureServices,只需向类添加一个WebHostEnvironment属性Startup并从构造函数中设置它:

public class Startup
{
    private IConfiguration Configuration { get; }
    private IWebHostEnvironment WebHostEnvironment { get; }

    public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
    {
        Configuration = configuration;
        WebHostEnvironment = webHostEnvironment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        if (WebHostEnvironment.IsDevelopment())
        {
            // ...
        }
    }
}

我也把这个Configuration属性放在这个例子中,因为很多程序都需要它。

请注意,类型是IWebHostEnvironment而不是IWebHostingEnvironment因为后者已被弃用。

关于您的第二个问题(如何从 访问操作处理器Configure),您能否说明一下您的意图?我不知道你想要达到什么目的。


推荐阅读