使用ServiceStack的扬鞭插件,如何实现与预设值的列表的字符串场(Using Service

2019-08-16 20:28发布

我在执行使用ServiceStack新扬鞭插件扬鞭API文档,我试图确定如何使用“容器”数据类型。 我需要显示其具有是子对象的列表的预定值和其他参数的列表的字符串字段。

除非我失去了一些东西,我相信招摇只能拿一个文本字段,你输入的JSON为你的子对象的列表。 我相信这个代码应该做的伎俩。

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

我不知道(和我希望有人在那里可以帮助我)是,如果有可能有一个字符串字段是从值预设列表。 在此扬鞭代码片段说明如何做到这一点。

"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做到的呢?

Answer 1:

我一直在挣扎了同样的问题,但已经意识到这个功能目前不支持。 你基本上不能发表或使用模型放置数据。 此功能是在不断变化和正在开发的,所以我想这是待办事项列表。

如果您查看源代码,你会看到,有没有Models在支持的属性ResourcesResponse数据合同:

[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"
            }
         }
      }
   }
}

我认为,解决这个问题的唯一办法是自己张贴整个对象。 有需要整个对象,诸如宠物一个请求对象。 设置ParameterType ,以bodyDataType ,以Pet 。 在扬鞭界面,你会看到一个文本,在其中您必须粘贴一个实际的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();
    }
}

下面将呈现:

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



文章来源: Using ServiceStack's Swagger Plugin, how to implement a string field with a list of preset values