Как настроить Swashbuckle для игнорирования свойства на модели по-разному для запроса и ответа - PullRequest
0 голосов
/ 07 апреля 2020

Здесь упоминается самая близкая ссылка на это, которая отлично работает. Как настроить Swashbuckle для игнорирования свойства в модели

Однако есть ли способ, если мы можем показать / скрыть разные свойства для запроса и ответа в одной и той же модели? В настоящее время предоставленное решение скрывает одинаковые свойства как для запроса, так и для ответа. Примером этого является случай, когда у нас есть поля идентификаторов, где по запросу мы не хотим показывать их в Swagger, а по ответу создается запись с доступным идентификатором.

Еще одна альтернатива, о которой я могу подумать, - это построить другую модель, но избыточность кода ужасна.

1 Ответ

0 голосов
/ 08 апреля 2020

Возможно, вы можете скрыть определение, но данные все равно будут отправлены. С помощью ISchemaFilter вы можете удалить некоторые свойства объекта.

User:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      username:
        type: "string"
      firstName:
        type: "string"
      lastName:
        type: "string"
      email:
        type: "string"
      password:
        type: "string"
      phone:
        type: "string"
      userStatus:
        type: "integer"
        format: "int32"
        description: "User Status"

Но вы не можете делать то, что хотите!

/user:
    post:
      tags:
      - "user"
      summary: "Create user"
      description: "This can only be done by the logged in user."
      operationId: "createUser"
      produces:
      - "application/xml"
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        description: "Created user object"
        required: true
        schema:
          $ref: "#/definitions/User" <--here !!!
      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/User" <--here !!!
        400:
          description: "Invalid username supplied"
        404:
          description: "User not found"

Эти входные и выходные данные указывают на один и тот же объект

/user/post/parameters[0]/schema/ref
/user/post/responses/200/schema/ref

Вы не можете сделать два определения для одного объекта.

Но вы можете использовать наследование и сокрытие.

public class All 
{
    public string test { get; set; }
    public string test2 { get; set; }
}

public class Some : All
{
    private new string test { get; set; }
    protected new string test2 { get { return base.test2; } set { base.test2 = value; } }
}

C2 x = new C2();
C1 y = x;
x.test = "xx";

System.Console.WriteLine(x.test); // "xx"
System.Console.WriteLine(y.test); // empty


System.Console.WriteLine(x.test2); // "xx"
System.Console.WriteLine(y.test2); // "xx"
...