Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# .net core/swagger-在生成swagger.json文件时,如何绕过控制器文件?_C#_Asp.net Core_Swagger_Swagger Codegen - Fatal编程技术网

C# .net core/swagger-在生成swagger.json文件时,如何绕过控制器文件?

C# .net core/swagger-在生成swagger.json文件时,如何绕过控制器文件?,c#,asp.net-core,swagger,swagger-codegen,C#,Asp.net Core,Swagger,Swagger Codegen,我已经处理了一个项目,并试图为它添加一个招摇过市的文件。(使用Swashback.AspNetCore) 我应该把一切都配置好 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "HCP API", Version = "v1" }); var xmlPath = Path.Combine(AppContext.BaseDirectory, "XXXXXXXX.WebForApi.xml"

我已经处理了一个项目,并试图为它添加一个招摇过市的文件。(使用Swashback.AspNetCore)

我应该把一切都配置好

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info { Title = "HCP API", Version = "v1" });
    var xmlPath = Path.Combine(AppContext.BaseDirectory, "XXXXXXXX.WebForApi.xml");
    c.IncludeXmlComments(xmlPath);
});
但是,我在生成swagger.json文件时遇到了一个异常

System.NotSupportedException: Ambiguous HTTP method for action - XXXXXXXXX.Frameworks.Users.ApiControllers.SystemUserController.ApiModel (XXXXXXXXX.Framework.Users). Actions require an explicit HttpMethod binding for Swagger 2.0
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItem(IEnumerable`1 apiDescriptions, ISchemaRegistry schemaRegistry)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItems(IEnumerable`1 apiDescriptions, ISchemaRegistry schemaRegistry)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath, String[] schemes)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync()
导致此错误的文件是通过NuGet包含在项目中的DLL文件。(它来自一家供应商公司,我不确定是否允许我展示它的名称。)

我试图添加过滤器以避免此控制器文件,但它没有运行到过滤器代码中。我不确定我添加的是否正确


是否仍要解决此问题?

是的,您需要添加一个过滤器来控制此行为。下面是一些帮助您包含过滤器的代码

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.DocumentFilter<HideInDocsFilter>();
});
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.DocumentFilter<HideInDocsFilter>();
});
public class HideInDocsFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        foreach (var apiDescription in context.ApiDescriptions)
        {
            if(apiDescription.RelativePath.Equals("SystemUser", System.StringComparison.OrdinalIgnoreCase))
            {
                var route = "/" + apiDescription.RelativePath.TrimEnd('/');
                swaggerDoc.Paths.Remove(route);
            }
        }
    }
}