2016-11-18 3 views
0
besteht immer

Mein Service-Modell:Servicestack Objektparameter nicht mit Swagger-UI Service

[Route("/customer/{CustomerId}/creditcardtoken/{CanLookup}", "POST")] 
public class CreditCardToken : IReturn<CreditCardTokenResponse> 
{ 
    [ApiMember(ParameterType = "path", DataType = "string", IsRequired = true, Verb = "POST")] 
    public string CustomerId { get; set; } 
    [ApiMember(ParameterType = "path", DataType = "boolean", IsRequired = true, Verb = "POST")] 
    public bool CanLookup { get; set; } 
    [ApiMember(ParameterType = "body", DataType = "CreditCard", IsRequired = true, Verb = "POST")] 
    public CreditCard CreditCard { get; set; } 
} 

public class CreditCard 
{ 
    public short CreditCardTypeId { get; set; } 
    public string NameOnCard { get; set; } 
    public string CardNumber { get; set; } 
    public string Expiration { get; set; } 
    public string PostalCode { get; set; } 
} 

Die Service-Schnittstelle hat nichts, um es (ich einen Haltepunkt auf der Rück null):

public class CreditCardTokenService : Service 
{ 
    public CreditCardTokenResponse Post(CreditCardToken request) 
    { 
     return null; 
    } 
} 

Verwenden der neuesten Version von Servicestack zum Schreiben dieser Frage (nicht. Net Core) für. Net 4.6.2.

Wenn ich die Felder in Swagger-UI ausfüllen, kommt das CreditCard-Objekt nicht durch, es ist nur Null. Nicht sicher, was ich vermisse, CustomerId und CanLookup kommen durch. Ich habe versucht, DataContract/DataMember auf die CreditCard-Klasse zu setzen.

enter image description here

Antwort

3

Ihre Anfrage DTO nicht der angegebenen Swagger Schema übereinstimmen, CreditCard nicht der Körper ist, es ist nur ein Parameter, der einen komplexen Typ Wert hat. Das gesamte CreditCardToken Anforderungs-DTO wird voraussichtlich als JSON-Hauptteil der HTTP-POST-Anforderung gesendet, während diese Definition nur einen CreditCard JSON-Hauptteil veröffentlicht. Die anderen Parameter kommen durch, weil sie auf den Pfadinformationen der Anfrage gesendet werden, d. H. Sie werden nicht in den Körper gesendet.

Verwandte Themen