c# - Servicestack 对象参数未通过 Swagger-UI 传递给服务

标签 c# servicestack swagger swagger-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; }
}

服务接口(interface)没有任何关系(我在返回null时设置了一个断点):

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

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

当我在 Swagger-UI 中填充字段时,CreditCard 对象没有出现,它只是空的。不确定我遗漏了什么,CustomerId 和 CanLookup 确实通过了。我尝试在 CreditCard 类上设置 DataContract/DataMember。

enter image description here

最佳答案

您的请求 DTO 与声明的 Swagger 架构不匹配,CreditCard 不是正文,它只是一个具有复杂类型值的参数。整个 CreditCardToken 请求 DTO 预计将作为 HTTP POST 请求的 JSON 主体进行 POST,而此定义仅发布 CreditCard JSON 主体。其他参数通过,因为它们是在请求的路径信息上发送的,即它们不在正文中发送。

关于c# - Servicestack 对象参数未通过 Swagger-UI 传递给服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684031/

相关文章:

c# - OrmLite 在连接表中选择多列

rest - 在 Azure API 管理中管理多个 REST API

python - DRF - `write_only=True` 在响应模式中显示

json - 如何在 ResponseEntity 中从 Swagger/OpenAPI 中省略空字段?

c# - 让 NUnit 在 Visual Studio Community 2017 下工作

asp.net-mvc-3 - ServiceStack MVC自动注册路由

servicestack - JSON 序列化程序而不是 ServiceStack ORMLite 中的 JSV

c# - 创建类似 Visual Studio 2010 的启动画面

c# - 在 C# 应用程序中使用 ANSI C 代码块

c# - 从 app.config 读取值