创建了新的.net core 3.1 Web Api项目,并将Swashbuckle配置为使用swagger。
一切正常,但是我需要我的应用程序使用我自己的swagger spec文件而不是自动生成的文件(\swagger\v1\swagger.json
)
我搜索了很多帖子,例如this,但在此都没有帮助。
我已经在项目的根路径中创建了my-custom-swagger.json文件(与.csproj相同的目录)
Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseSwagger();
// app.UseStaticFiles(new StaticFileOptions
//{
// FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory),
// RequestPath = "my-custom-swagger.json"
// });
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Core Test SW");
c.RoutePrefix = string.Empty;
});
如何使我大张旗鼓地使用my-custom-swagger.json
文件而不是自动生成的文件
默认情况下,Swagger将返回默认文档,其中包括项目中所有REST服务的描述。
但是,可以通过调用DocInclusionPredicate(Func<string, ApiDescription> predicate)
来更改此默认值-必须将该函数传递给一个函数,该函数接收JSON文档名称和操作方法描述,并且如果该操作的文档应包含在该JSON文档中,则应返回true 。
以下未测试的代码。
services.AddSwaggerGen(c => {
c.DocInclusionPredicate((docName, description) => {
if (docName == "my-custom-swagger") {
return true;
}
return false;
});
})
所有功劳应该归功于:具备C#8和.NET Core 3的软件架构知识。]