gpt4 book ai didi

swagger - ServiceStack Swagger 主体

转载 作者:行者123 更新时间:2023-12-05 06:29:50 27 4
gpt4 key购买 nike

我正在努力让 Swagger 正确呈现我的 ServiceStack 服务。

我希望看到一个 UserId 字符串作为表单参数,一个 PrivateCustomer 对象作为主体参数,但是尽管 UserId 也作为一个单独的输入字段出现,但仍继续获取包含 UserId 和 PrivateCustomer 的主体参数。

这是我的代码: enter image description here

这是 Swagger 中的结果: enter image description here

如何去掉正文中的 UserId?

非常感谢!

最佳答案

[Api*] 注释仅用于记录您的 API,它们不会影响您的 API 的行为,例如请求主体始终是整个 Request DTO,您不能同时发送“form”和“body”参数类型,即只有 1 个请求主体,当使用“form”时,只有表单变量将被发送。

如果您想将它们分开,您可以将 UserId 添加到查询字符串中,并使用以下命令将它们排除在模型模式之外:

[Route("/CreatePrivateCustomer", "POST")]
public class CreatePrivateCustomerRequest
{
[ApiMember(IsRequired = true, ParameterType = "query", ExcludeInSchema = true)]
public string UserId { get; set; }

[ApiMember(IsRequired = true, ParameterType = "model")]
public PrivateCustomer Customer { get; set; }
}

这将分离变量并在queryString中发送UserId,在Request Body中将DTO的请求作为JSON发送,例如:

POST /CreatePrivateCustomer?UserId=1
Content-Type: application/json

{"Customer":{"CustomerNumber":1,...}}

尽管通常如果您希望将必需的参数与请求主体分开,您会将它们放在路径中,例如:

[Route("/CreatePrivateCustomer/{UserId}", "POST")]
public class CreatePrivateCustomerRequest
{
[ApiMember(IsRequired = true, ParameterType = "path", ExcludeInSchema = true)]
public string UserId { get; set; }

[ApiMember(IsRequired = true, ParameterType = "model")]
public PrivateCustomer Customer { get; set; }
}

如果您不想嵌套 PrivateCustomer 属性,您可以将它们直接添加到 Request DTO 中,例如:

[Route("/CreatePrivateCustomer/{UserId}", "POST")]
public class CreatePrivateCustomerRequest
{
[ApiMember(IsRequired = true, ParameterType = "path", ExcludeInSchema = true)]
public string UserId { get; set; }

public int CustomerNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

关于swagger - ServiceStack Swagger 主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com