servicestack,Swagger,servicestack" /> servicestack,Swagger,servicestack" />

Swagger ServiceStack摆动机构

Swagger ServiceStack摆动机构,swagger,servicestack,Swagger,servicestack,我正在努力让Swagger正确地展示我的ServiceStack服务 我希望将UserId字符串视为表单参数,将PrivateCustomer对象视为body参数,但仍要使用UserId和PrivateCustomer获取body参数,尽管UserId也显示为单独的输入字段 这是我的密码: 下面是《招摇过市》的结果: 我如何去掉身体中的用户ID 非常感谢 注释仅用于记录您的Api,它们不会影响您的Api行为,例如,请求正文始终应为整个请求DTO,并且您不能同时发送“表单”和“正文”参数类型,

我正在努力让Swagger正确地展示我的ServiceStack服务

我希望将UserId字符串视为表单参数,将PrivateCustomer对象视为body参数,但仍要使用UserId和PrivateCustomer获取body参数,尽管UserId也显示为单独的输入字段

这是我的密码:

下面是《招摇过市》的结果:

我如何去掉身体中的用户ID


非常感谢

注释仅用于记录您的Api,它们不会影响您的Api行为,例如,请求正文始终应为整个请求DTO,并且您不能同时发送“表单”和“正文”参数类型,即只有一个请求正文和使用“表单”时只发送表单变量

如果要将它们分开,可以将
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
,在请求正文中发送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
属性,您可以直接将它们添加到请求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; }
}

我懂了。这是否意味着您不能将操作定义为同时具有header和body参数?UserId仅用于日志记录,与主体中的对象无关,因此我不希望将其包含在路径中。在MVC中,这样做的方式是:PostPrivateCustomer([FromHeader]字符串UserId,[FromBody]PrivateCustomer)@ThomasNørgaard第一个示例显示了一个查询字符串,您可以将其设置为标头,但不会在DTO上填充(您需要从base.Request.Headers[“UserId”]检索它),而且许多HTTP客户机库API不支持HTTP标头(或处于受限制的环境中)并且需要特殊的处理来支持,这会使需要自定义头的API处理起来很麻烦,所以应该避免使用它们。