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

更改中通过Swashbuckle生成的Swagger JSON的参数名。NETWebAPI 2

郎飞航
2023-03-14

目标:我正在设计一个RESTAPI,它允许用户在HTTP GET请求的查询字符串上传递参数。差不多

http://fake.api.com/search?api-key=1235&term=car&rows=10

实现:在服务器端,我有一个模型绑定器,它接受这3个参数——api键、术语和行,并将它们转换为C#对象,这样我的控制器操作方法就不必解析查询字符串。控制器动作方法签名看起来像

public IHttpActionResult Get(RequestObject request)

问题:我在Swagger中遇到的是,当它生成留档和测试线束时,它将输入参数列为request.api键、request.term和request.rows.这是因为JSON是从服务器获取是将对象名称作为这些值的前缀。因此,当您尝试使用Swagger UI执行HTTP GET请求时,它会生成如下URL

http://fake.api.com/search?request.api-key=1235&request.term=car&request.rows=10

这是对服务器的不正确请求。现在我可以很容易地让我的模型活页夹更聪明,忽略“请求”一部分,但这似乎是解决这个问题的落后方法。

问题:我如何自定义由斯瓦什巴克生成的JSON-

共有2个答案

狄子真
2023-03-14

我遇到了一个类似的问题,并找到了一个简单的解决办法

虽然在我的例子中,它是用于POST/PUT的,但它对GET不起作用,因为GET没有主体。一旦我使用了属性FromBody,Swagger就开始呈现一个没有前缀的正确JSON。所以在我的例子中,它看起来是这样的:

public IHttpActionResult Post([FromBody]RequestObject request)

它并没有直接回答你的问题,但是我正在寻找一个非常相似的昂首阔步相关问题的解决方案,这对我很有帮助,所以我希望它能对任何人有所帮助。

邓欣德
2023-03-14

找到了一个解决方案,结果是我忽略了一件事——IOperationFilter。看见https://github.com/domaindrivendev/Swashbuckle/issues/128详情请参阅。

最新消息

下面是注释中提到的解决方案的代码

public class IgnorePrefixParamsNameBeforeDot : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters != null)
        {
            foreach (Parameter param in operation.parameters.Where(p => p.name.Contains('.')))
            {
                param.name = param.name.SplitWithoutEmpty('.').Last();
            }
        }
    }
}
 类似资料:
  • 问题内容: 我的UserDetails类与Entitity类Vehicle具有一对一的映射。创建2个表并分配一个通用外键,该键将vehicle_id列(UserDetails表)映射到主键vehicleId(Vehicle表)。 我的问题是:如何将生成的外键更改为有意义的内容,例如Fk_userdetails_vehicle。 问题答案: 从JPA 2.1开始,您可以使用@ javax.persi

  • 我的UserDetails类与Entitity类Vehicle有一个一对一的映射。创建两个表并分配一个泛型外键,该外键映射vehicle_id列(UserDetails表)至主键vehicleId(Vehicle table)。 我的问题是:我们如何将这个生成的外键改变成有意义的东西,比如Fk_userdetails_vehicle。

  • 我的功能有问题,它使用作为进行搜索,但数据库中没有 我有一个错误: Illumb\Database\QueryException(42S22)SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“courses.id”(SQL:select*fromwhereid=cmpe102 limit 1)

  • 每次我用Android Studio(1.02)运行一个项目时,它都会生成一个未签名的apk,该apk位于..\build\outputs\apk文件夹中,默认情况下获得名称“app-debug.apk”

  • 我使用swagger springmvc和swagger codegen为RESTful Web服务生成Java客户端库。我已经编写了自己的BasicJavaGenerator扩展名(见下文),以覆盖包名,并可以成功生成客户端库文件。生成的“主”文件包括: 我找不到的是如何设置我的API的名称以使代码生成器将ApiApi.java重命名为MyProjectApi.java(例如),这似乎是在swa

  • 问题内容: 我正在使用从数组生成json ,它工作正常,但照常使用数组中的key:value。但是我只想在json输出中更改键的名称..可以这样做吗?还是我应该准备json键:手动给自己赋值? 例: O / P 我想要 。 编辑:我不能编辑原始数组。。(使用framweork生成) 问题答案: 只有重写自己。您可以使用: 不确定这是否是您的目标。