Аннотации [Api*]
предназначены только для документирования вашего API, они не влияют на поведение вашего API, например, тело запроса всегда должно быть полным DTO запроса, и вы не можете одновременно отправлять типы параметров «форма» и «тело», т. е. имеется только 1 тело запроса, а при использовании «формы» только переменные формы будет отправлен.
Если вы хотите разделить их, вы можете добавить 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; }
}
Это разделит переменные и отправит UserId
в queryString и запрос 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; }
}