2016-11-18 21 views
0

我的服务模式:Servicestack对象参数没有获得通过与扬鞭-UI到服务

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

服务接口无关,它(我设置的回空破发点):

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

使用最新版本的servicestack作为撰写此问题(不是.Net Core)的.Net 4.6.2。

当我填充Swagger-UI中的字段时,CreditCard对象不会通过,它只是null。不知道我错过了什么,CustomerId和CanLookup确实会通过。我尝试在CreditCard类上设置DataContract/DataMember。

enter image description here

回答

3

您的要求DTO不符合申报扬鞭模式,CreditCard是不是身体它只是有一个复杂类型值的参数。整个CreditCardToken请求DTO预计将POST'作为HTTP POST请求的JSON正文,而此定义仅发布CreditCard JSON正文。其他参数正在通过,因为它们是在请求的路径信息上发送的,即它们不在本体中发送。