ServiceStack Swagger 主体
ServiceStack Swagger body
我正在努力让 Swagger 正确呈现我的 ServiceStack 服务。
我希望看到一个 UserId 字符串作为表单参数,一个 PrivateCustomer 对象作为主体参数,但是尽管 UserId 也作为一个单独的输入字段出现,但仍继续获取包含 UserId 和 PrivateCustomer 的主体参数。
这是我的代码:
这是 Swagger 中的结果:
如何去掉正文中的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 服务。
我希望看到一个 UserId 字符串作为表单参数,一个 PrivateCustomer 对象作为主体参数,但是尽管 UserId 也作为一个单独的输入字段出现,但仍继续获取包含 UserId 和 PrivateCustomer 的主体参数。
这是我的代码:
这是 Swagger 中的结果:
如何去掉正文中的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; }
}