当前位置: 首页 > 知识库问答 >
问题:

Asp。net Core招摇过市:如何显示GET类型的API

樊杰
2023-03-14

如何仅显示类型为GET in Swagger page的API并隐藏其他API?我发现属性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);
            }
        }
    }

但没用

共有1个答案

公良照
2023-03-14

编写一个自定义过滤器,如下所示:

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>());
//......

我不添加[ApiExplorerSetting(IgnoreApi=true)]在我的apictroller中,它工作得很好。

但是,确保Getendpoint和其他类型的endpoint在同一个控制器中具有不同的路由,您可以在Getendpoint上添加像[HttpGet("/get")]这样的属性路由。如果您在同一个控制器中这样写:

       [HttpPost]
        public IActionResult Post()
        {
            return Ok();
        }

        [HttpGet]
        public IActionResult Get()
        {
            return NotFound();
        }

获取Postendpoint将具有相同的路径。swaggerDoc。路径。删除(xxx);将删除所有它们。

重新使用:

之前

之后

 类似资料:
  • 我使用Springfox从Spring Boot REST控制器生成了Swagger API规范。 我注意到一个问题,示例值/模型无法显示响应。 作为调查,我在http://localhost:8080/v2/api-文档,并在https://editor.swagger.io/,它也无法显示示例值/模型。这似乎是由于模式没有正确引用模型对象(“Car”)造成的。 但是从Swagger的API文档

  • 我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger 这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://loc

  • 我正在使用swagger doc为我的应用程序生成API。doc是用yml编写的,在某些地方它将定义一些枚举道具(我们使用mysql)。这看起来像: 我希望得到这样的东西: 正如您所看到的,类型字段将是一个在配置文件中定义的字符串,但我收到的是这个字符串: Swagger将第一个值设置为数据类型,这是绝对错误的。所以问题是如何为“type”字段获取值“string”。

  • 我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。

  • 我正在开发一个RESTfull web服务,它使用swagger和swagger-codegen-maven插件来创建模型、控件和api类(这是与spring annotatios的接口)。 pom中的插件。xml是下一个: 当我想要创建一个新的控制器类(它不同于Swagger创建的控制器类)时,它实现了api类和方法的签名,但是,该类不会在方法的参数中写入注释(例如:@RequestParam、

  • 我正在努力理解如何为API网关使用Swagger扩展: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html 我正在通过AWS CLI使用导入/导出RestAPI,但在命令行中找不到如何使用它们的任何示例。你能帮忙吗? 谢谢