我正在开发内部带有Web API项目的Asp.Net核心3.1 MVC Web应用程序。现在,我仅想为API项目配置Swagger文档,那么如何在配置中指定仅将Web API控制器用于文档?
在ConfigureServices方法内的启动类中,对摇摇欲坠的配置如下:-
services.AddSwaggerGen(option =>
{
option.SwaggerDoc("v1.0",
new OpenApiInfo
{
Title = "ProjName OpenApi",
Version = "1.0",
//Description = //get from appsettings.json
});
var xmlCommentFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlCommentFilePath = Path.Combine(AppContext.BaseDirectory, xmlCommentFileName);
option.IncludeXmlComments(xmlCommentFilePath);
});
配置方法中的配置如下:
app.UseSwagger(option =>
{
option.RouteTemplate = "docs/{documentname}/swagger.json";
});
app.UseSwaggerUI(option =>
{
option.SwaggerEndpoint("/docs/v1.0/swagger.json", "ProjName OpenApi v1.0");
option.RoutePrefix = "docs/v1.0";
option.DocumentTitle = "ProjName OpenAPI Docs";
});
问题在于,swagger gen正在控制器文件夹,“管理和标识区域”中寻找用于生成文档的文件,但我想将其配置为仅使用WebApi文件夹中的控制器。在这些文档中已指定“路由属性”的所有Controllers或Action方法也会在API文档中列出。如何排除这些?
有人可以帮我这个忙吗?我真的被困在这里。
PS:我想提一下,我无法将API层移到其单独的项目中。
根据您的描述,建议您尝试创建一个自定义过滤器,以检查控制器名称是否为mvc controller,然后删除其路由。
更多详细信息,您可以参考以下代码:
Startup.cs ConfigureServices方法:
services.AddSwaggerGen(option =>
{
option.SwaggerDoc("v1.0",
new OpenApiInfo
{
Title = "ProjName OpenApi",
Version = "1.0"});
option.DocumentFilter<HideInDocsFilter>();
});
HideInDocsFilter
public class HideInDocsFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
foreach (var apiDescription in context.ApiDescriptions)
{
// replace the data to your controller name
if (apiDescription.ActionDescriptor.DisplayName.Contains("Data"))
{
var route = "/" + apiDescription.RelativePath.TrimEnd('/');
swaggerDoc.Paths.Remove(route);
}
}
}
}
结果:
仅包含WeatherForecast控制器方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句