私は同じ問題に苦しんでいますが、この機能は現在サポートされていないことに気付きました。モデルを使用してデータを POST または PUT することは基本的にできません。この機能は流動的で開発中なので、todo リストにあると思います。
ソース コードを表示すると、 ResourcesResponseデータ コントラクトModels
でサポートされているプロパティがないことがわかります。
[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
します。Swagger インターフェイスには、実際の JSON オブジェクトを貼り付ける必要があるテキストエリアが表示されます。リクエストは次のようになります。body
DataType
Pet
[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();
}
}
以下がレンダリングされます。
次のようにオブジェクトを入力すると、リクエストが正しく解析されます。