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