微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Asp.Net Core MVC项目中为Swagger文档明确定义API控制器路径

如何解决如何在Asp.Net Core MVC项目中为Swagger文档明确定义API控制器路径

我正在开发内部带有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);
});

,Configure方法中的配置如下:-

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正在controllers文件夹,“管理和身份区域”中查找用于生成文档,但是我想将其配置为仅使用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控制器方法

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。