Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Asp.Net核心MVC项目中为Swagger文档显式定义API控制器路径_C#_Asp.net_Asp.net Core Mvc_Asp.net Core Webapi_Swagger 3.0 - Fatal编程技术网

C# 如何在Asp.Net核心MVC项目中为Swagger文档显式定义API控制器路径

C# 如何在Asp.Net核心MVC项目中为Swagger文档显式定义API控制器路径,c#,asp.net,asp.net-core-mvc,asp.net-core-webapi,swagger-3.0,C#,Asp.net,Asp.net Core Mvc,Asp.net Core Webapi,Swagger 3.0,我正在开发一个Asp.Net core 3.1 MVC web应用程序,其中包含web API项目。 现在我只想为API项目配置Swagger文档,那么如何在配置中指定仅使用web API控制器进行文档 ConfigureServices方法内startup类中的swagger配置如下:- services.AddSwaggerGen(选项=> { option.SwaggerDoc(“v1.0”, 新OpenApiInfo { Title=“ProjName OpenApi”, Version

我正在开发一个Asp.Net core 3.1 MVC web应用程序,其中包含web API项目。 现在我只想为API项目配置Swagger文档,那么如何在配置中指定仅使用web API控制器进行文档

ConfigureServices方法内startup类中的swagger配置如下:-

services.AddSwaggerGen(选项=>
{
option.SwaggerDoc(“v1.0”,
新OpenApiInfo
{
Title=“ProjName OpenApi”,
Version=“1.0”,
//Description=//从appsettings.json获取
});
var xmlCommentFileName=$“{Assembly.GetExecutionGassembly().GetName().Name}.xml”;
var xmlcomentfilepath=Path.Combine(AppContext.BaseDirectory,xmlcomentfilename);
option.includexmlcoments(xmlcomentfilepath);
});
配置方法中的配置如下:-

app.UseSwagger(选项=>
{
option.RouteTemplate=“docs/{documentname}/swagger.json”;
});
app.UseSwaggerUI(选项=>
{
option.SwaggerEndpoint(“/docs/v1.0/swagger.json”,“ProjName OpenApi v1.0”);
option.RoutePrefix=“docs/v1.0”;
option.DocumentTitle=“ProjName OpenAPI Docs”;
});
问题是,swagger gen正在查找controllers文件夹、Admin&Identity区域以生成文档,但我更希望将其配置为仅使用WebApi文件夹中的控制器。 API文档中还列出了在这些控制器中指定路由属性的所有控制器或操作方法。我怎样才能排除这些

谁能帮我解决这个问题吗?我真的被困在这里了


PS:我想提到的是,我不能将API层移动到其单独的项目中。

根据您的描述,我建议您尝试创建一个自定义过滤器,以检查控制器名称是否为mvc控制器,然后删除其路由

更多详细信息,请参考以下代码:

Startup.cs ConfigureServices方法:

        services.AddSwaggerGen(option =>
        {
            option.SwaggerDoc("v1.0",
new OpenApiInfo
{
    Title = "ProjName OpenApi",
    Version = "1.0"});
            option.DocumentFilter<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);
            }
        }
    }
}