使用ServiceStack的Swagger Plugin,如何实现带有预设值列表的字符串字段

2024-01-09

我正在使用 ServiceStack 的新 Swagger 插件实现 Swagger API 文档,并尝试确定如何使用“容器”数据类型。我需要显示一个字符串字段,其中包含预定值列表和其他作为子对象列表的参数。

除非我遗漏了一些东西,否则我相信 swagger 只能采用一个文本字段,您可以在该文本字段中输入子对象列表的 JSON。我相信这段代码应该可以解决问题。

[ApiMember(Name = "Connections", Description = "insert JSON sample here", ParameterType = "body", DataType = "container", IsRequired = false, Verb = "Post")]

我不知道(并且希望有人可以帮助我)是是否可以有一个来自预设值列表的字符串字段。在 Swagger 中,此代码片段说明了如何执行此操作。

"Pet":{
    "id":"Pet",
    "properties":{
    ...
      "status":{
        "type":"String",
        "description":"pet status in the store",
        "allowableValues":{
          "valueType":"LIST",
          "values":[
            "available",
            "pending",
            "sold"
          ]
        }
      },
      "happiness": {
        "type": "Int",
        "description": "how happy the Pet appears to be, where 10 is 'extremely happy'",
        "allowableValues": {
          "valueType": "RANGE",
          "min": 1,
          "max": 10
        }
      },
      ...

有谁知道这是如何使用 ServiceStack.Api.Swagger 实现的?


我一直在努力解决同样的问题,但意识到目前不支持此功能。您基本上无法使用模型发布或放置数据。此功能正在不断变化并正在开发中,因此我想它已在待办事项列表中。

如果你查看源代码,你会发现没有Models支持的财产资源响应 https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Api.Swagger/SwaggerResourcesService.cs#L19数据合约:

[DataContract]
public class ResourcesResponse
{
    [DataMember(Name = "swaggerVersion")]
    public string SwaggerVersion { get; set; }
    [DataMember(Name = "apiVersion")]
    public string ApiVersion { get; set; }
    [DataMember(Name = "basePath")]
    public string BasePath { get; set; }
    [DataMember(Name = "apis")]
    public List<RestService> Apis { get; set; }
}

如果将此与 Wordnik 上的 Petstore 示例进行比较,您会发现模型作为根节点包含在内:

{
   "apiVersion":"0.2",
   "swaggerVersion":"1.1",
   "basePath":"http://petstore.swagger.wordnik.com/api",
   "resourcePath":"/pet",
   "apis":[
      {
         "path":"/pet.{format}",
         "description":"Operations about pets",
         "operations":[
            {
               "httpMethod":"POST",
               "summary":"Add a new pet to the store",
               "responseClass":"void",
               "nickname":"addPet",
               "parameters":[
                  {
                     "description":"Pet object that needs to be added to the store",
                     "paramType":"body",
                     "required":true,
                     "allowMultiple":false,
                     "dataType":"Pet"
                  }
               ],
               "errorResponses":[
                  {
                     "code":405,
                     "reason":"Invalid input"
                  }
               ]
            }
         ]
      }
   ],
   "models":{
      "Category":{
         "id":"Category",
         "properties":{
            "id":{
               "type":"long"
            },
            "name":{
               "type":"string"
            }
         }
      },
      "Pet":{
         "id":"Pet",
         "properties":{
            "tags":{
               "items":{
                  "$ref":"Tag"
               },
               "type":"Array"
            },
            "id":{
               "type":"long"
            },
            "category":{
               "type":"Category"
            },
            "status":{
               "allowableValues":{
                  "valueType":"LIST",
                  "values":[
                     "available",
                     "pending",
                     "sold"
                  ],
                  "valueType":"LIST"
               },
               "description":"pet status in the store",
               "type":"string"
            },
            "name":{
               "type":"string"
            },
            "photoUrls":{
               "items":{
                  "type":"string"
               },
               "type":"Array"
            }
         }
      },
      "Tag":{
         "id":"Tag",
         "properties":{
            "id":{
               "type":"long"
            },
            "name":{
               "type":"string"
            }
         }
      }
   }
}

我认为解决这个问题的唯一方法是自己发布整个对象。拥有一个接受整个对象的请求对象,例如 Pet。设置ParameterType to bodyDataType to Pet。在 Swagger 界面中,您将看到一个文本区域,您必须将实际的 JSON 对象粘贴到其中。您的请求将如下所示:

[Api("The Thing Service")]
[Route("/thing", "POST", Summary = @"POST a new thing", Notes = "Send a thing here")]
public class ThingRequest
{
    [DataMember]
    [ApiMember(Name = "Thing", Description = "The thing", ParameterType = "body", DataType = "Thing", IsRequired = false)]
    public ThingDto Thing { get; set; }
}

你的服务是这样的:

/// <summary>
/// Summary description for ThingService
/// </summary>
public class ThingService : Service
{
    public IThingRepository ThingRepository { get; set; }

    public object Post(ThingRequest request)
    {
        var thing = Thing.Map(request);
        ThingRepository.Save(thing);
        return new ThingResponse();
    }
}

将呈现以下内容:

像这样输入对象,请求将被正确解析:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ServiceStack的Swagger Plugin,如何实现带有预设值列表的字符串字段 的相关文章

随机推荐

  • 在 python 中连接 .m3u8 中存在的文件

    我正在尝试在 python 中连接 m3u8 播放列表中存在的 ts 文件 有什么办法可以做到吗 如果是 请解释一下如何 提前致谢 这应该可行 我只在这个简短的脚本中添加了两条注释 因为我想它几乎是不言自明的 import shutil P
  • 如何在discord.py中使用on_raw_reaction_add?

    好吧 我有一个程序 一个票务系统 它以 JSON 格式记录工单创建消息 ID 以便在程序重新启动时可以继续检查是否添加了新的反应 但我发现该消息必须加载到机器人的缓存中 但一旦重新启动 它就不会存在 所以我发现on raw reaction
  • 强制转换规范的字符值无效

    我正在使用 SQLXMLBulkLoad SQLXMLBulkload 3 0 将数据插入 SQL 2005 我的数据表有以下列 objDataTable Columns Add TaskDateTime System Type GetTy
  • Objective-C:UIViewController 中出现的键盘隐藏的 UIScroller 和 UItextfields

    我需要帮助尝试在 UIViewController 中配置键盘 a 不要将鼠标悬停在两个 UITextfields 上 因此滚动条应该正确定位 b 当用户触摸背景时键盘消失 我还没有尝试过 b 但我正在尝试 a 并且我通过谷歌搜索得到的代码
  • [System.Collections.Generic.List[string]] 作为返回值

    我需要 想要退货 System Collections Generic List string 来自函数 但它正在转换为System Object 我有这个 function TestReturn returnList New Object
  • 删除 Vim 中除正则表达式匹配之外的所有内容

    我的具体案例是一个包含大量文本和 IPv4 地址的文本文档 我想删除除 IP 地址之外的所有内容 我可以用 vglobal寻找 0 9 1 3 3 0 9 1 3 并删除所有没有IP地址的行 但之后我只知道如何搜索整行并选择匹配的文本 有更
  • 在另一个 LINQ 查询中重用 LINQ 查询结果,而无需重新查询数据库

    我遇到的情况是 我的应用程序根据用户指定的过滤条件使用 PredicateBuilder 构建动态 LINQ 查询 旁白 查看此link http petemontgomery wordpress com 2011 02 10 a univ
  • 确定程序集的加载上下文

    给定一个加载的Assembly有没有办法 在代码中 确定它被加载到 3 个加载上下文中的哪一个 默认Load 加载自 or Neither In 苏珊 库克的 选择一个有约束力的上下文 https web archive org web 2
  • 文件格式:使用 awk NR 变量造成混乱

    我是 awk 编程新手 对 NR 变量的使用有点困惑 我的代码是 awk BEGIN k NR printf s s s s n k k 1 k 2 k 3 auth data 猫 auth data 6262 6530 6661 3162
  • 访问条件格式以获取单个记录的连续形式

    我有一个连续的表格 列出了采样时间以及这些样本中不同化学物质的含量 我想格式化单元格以显示化学水平何时超出范围 我的问题是 它们在每个采样时间都会发生变化 3 对于 10 小时的样本来说太高了 但对于 30 小时来说还不错 下面是我的连续形
  • Excel:从整数部分时间转换为分钟时间

    我有一些列 其中日期值采用整数格式 即 14 06736111 1 37 我想把格式变成几分钟 我尝试使用自定义格式的 m 格式 这适用于许多单元格 但其中一些会抛出疯狂的数字 例如 对于时间为 1 37 的单元格 我得到的是 20257
  • 编写一个以 root 身份运行的 perl cgi 应用程序

    我正在编写一个 Perl CGI 应用程序 在某些时候 此 cgi 应用程序需要以 root 身份运行才能访问和写入特定文件 我想知道我到底应该如何执行此操作以及执行此操作时应采取的安全预防措施 你几乎不应该 如果您无法避免它 请创建一小段
  • Python 字符串到 unicode [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 python 中将 ASCII 字符串视为 unicode 并对其中的转义字符进行转义 https stackoverflow com questions 267436 how do i tr
  • 如何使用 Python 将专辑封面嵌入到 MP3 中?

    我一直在使用 mutagen 来读取和写入 MP3 标签 但我希望能够将专辑封面直接嵌入到文件中 以下是如何使用 mutagen 将 example png 作为专辑封面添加到 example mp3 中 from mutagen mp3
  • C++ pow 函数 - 结果无效?

    为什么 dResult 的输出无效 环境 Visual Studio 2008 int tmain int argc TCHAR argv double dN 0 091023604111478473 double dD 0 1277777
  • jQuery - 禁用基于另一个字段选定值的输入字段

    我正在寻找一个可以执行此操作的 jQuery 插件 例如
  • thymeleaf - 将 th:each 与 th:href 结合起来

    我是 Thymeleaf 和 webdev 的新手 我正在尝试将 Thymeleaf 迭代 th each 与 URL 重写 th href 结合起来 a hello a 这会产生以下结果 其中lid 45 a href list l li
  • 在练习 TDD 的同时学习 OpenGL(单元测试)

    我已经开始了一个新的游戏项目 并决定为其学习和使用OpenGL 项目正在Windows和Linux上同时开发 同时 我也对测试驱动开发非常感兴趣 并且正在尽最大努力在任何实际代码之前编写单元测试来引导设计 然而 我认为我缺乏知识可能会绊倒我
  • 模拟两个方块碰撞以计算 PI 时的动画故障

    我在用pygame创建两个方块碰撞的模拟质量比为 100 次方 明确地说 这意味着较大块与较小块的比率可以是100 0 100 1 100 2等等 我在必要时添加了注释和文档字符串 以使逻辑易于理解 import pygame from c
  • 使用ServiceStack的Swagger Plugin,如何实现带有预设值列表的字符串字段

    我正在使用 ServiceStack 的新 Swagger 插件实现 Swagger API 文档 并尝试确定如何使用 容器 数据类型 我需要显示一个字符串字段 其中包含预定值列表和其他作为子对象列表的参数 除非我遗漏了一些东西 否则我相信