Asp.net Core + Swagger:如何显示 GET 类型的 API
Asp.net Core + Swagger : How to show APIs of type GET
如何在 Swagger 页面中只显示 API 类型的 GET 并隐藏其他?
我发现属性 [ApiExplorerSettings(IgnoreApi = true)]
可以从 Swagger 页面隐藏 API,
但我有很多 API 要隐藏,我需要一种方法来根据其 HTTP 类型隐藏 API。
我试过这种方法:
public class SwaggerFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var nonGetPaths = swaggerDoc.Paths.Where(x => x.Value.Operations.First().Key != OperationType.Get);
var count=nonGetPaths.Count();
foreach (var item in nonGetPaths)
{
swaggerDoc.Paths.Remove(item.Key);
}
}
}
但是没用
像这样写一个自定义过滤器:
public class SwaggerFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
foreach (var path in swaggerDoc.Paths)
{
foreach (var key in path.Value.Operations.Keys )
{
if (key != OperationType.Get)
{
swaggerDoc.Paths.Remove(path.Key);
}
}
}
}
}
然后在program.cs(.Net 6)
中配置
//.......
builder.Services.AddSwaggerGen(x=>x.DocumentFilter<SwaggerFilter>());
//......
我没有在我的 apicontroller 中添加 [ApiExplorerSettings(IgnoreApi = true)]
,它工作正常。
但是,请确保 Get
端点和其他类型的端点在同一控制器中具有不同的路由,您可以在 Get
端点上添加属性路由,如 [HttpGet("/get")]
。如果你只是在同一个控制器中这样写:
[HttpPost]
public IActionResult Post()
{
return Ok();
}
[HttpGet]
public IActionResult Get()
{
return NotFound();
}
Get
和 Post
端点将具有相同的路径。 swaggerDoc.Paths.Remove(xxx);
将删除所有这些。
结果:
之前
之后
如何在 Swagger 页面中只显示 API 类型的 GET 并隐藏其他?
我发现属性 [ApiExplorerSettings(IgnoreApi = true)]
可以从 Swagger 页面隐藏 API,
但我有很多 API 要隐藏,我需要一种方法来根据其 HTTP 类型隐藏 API。
我试过这种方法:
public class SwaggerFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var nonGetPaths = swaggerDoc.Paths.Where(x => x.Value.Operations.First().Key != OperationType.Get);
var count=nonGetPaths.Count();
foreach (var item in nonGetPaths)
{
swaggerDoc.Paths.Remove(item.Key);
}
}
}
但是没用
像这样写一个自定义过滤器:
public class SwaggerFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
foreach (var path in swaggerDoc.Paths)
{
foreach (var key in path.Value.Operations.Keys )
{
if (key != OperationType.Get)
{
swaggerDoc.Paths.Remove(path.Key);
}
}
}
}
}
然后在program.cs(.Net 6)
中配置//.......
builder.Services.AddSwaggerGen(x=>x.DocumentFilter<SwaggerFilter>());
//......
我没有在我的 apicontroller 中添加 [ApiExplorerSettings(IgnoreApi = true)]
,它工作正常。
但是,请确保 Get
端点和其他类型的端点在同一控制器中具有不同的路由,您可以在 Get
端点上添加属性路由,如 [HttpGet("/get")]
。如果你只是在同一个控制器中这样写:
[HttpPost]
public IActionResult Post()
{
return Ok();
}
[HttpGet]
public IActionResult Get()
{
return NotFound();
}
Get
和 Post
端点将具有相同的路径。 swaggerDoc.Paths.Remove(xxx);
将删除所有这些。
结果:
之前
之后