NSwag 中的条件运算处理器

Conditional OperationProcessor in NSwag

我尝试在 NSwag 中有条件地添加一个 OperationProcessor。比如我们在开发环境(env.IsDevelopment)

时,DefaultApiValueOperationProcessor应该只有added/enabled

不幸的是,我无法在 ConfigureServices 中检索到 IHostingEnvironment,而且我无法在 Configure 中获取 Swagger 的 OperationProcessors,请参阅评论中的代码示例行:

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();
    }
}

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

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

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访问运算处理器),能否请你说明一下你的意图?我不知道你想达到什么目的。