C# .net core/swagger-在生成swagger.json文件时,如何绕过控制器文件?
我已经处理了一个项目,并试图为它添加一个招摇过市的文件。(使用Swashback.AspNetCore) 我应该把一切都配置好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"
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);
}
}
}
}