Создание модели ответа Swagger, когда часть ответа динамически генерируется в .NET - PullRequest
0 голосов
/ 01 октября 2019

Я использую swashbuckle 4.1.

У меня есть общий тип ответа:

{
statuscode:int
message:""
result: dynamically determined wrt request`
count: int`
}

Здесь параметр результата определяется динамически для каждой конечной точки во время выполнения.

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

Через декларативные операторы.

т.е.

public JsonResult<Response> endpointformodeltypeA(){
---
---
}

Его ответ будетbe:

 {
    statuscode:int
    message:""
    result: modelA
    count: int`
    }

result:modelA определяется динамически.
Как бы это определить в чванстве с помощью декларативных операторов.

1 Ответ

1 голос
/ 01 октября 2019

Вы можете сделать это с помощью Generics .

Сначала создайте свой базовый класс ответа.

public class SomeBaseResponse<T>
{
        [JsonProperty("statuscode")]
        public int StatusCode { get; set; }

        [JsonProperty("message")]
        public string Message { get; set; }

        [JsonProperty("result")]
        public T Result { get; set; }

        [JsonProperty("count")]
        public int Count { get; set; }
}

Затем вы можете ответить этим классом из действия вашего контроллера. Вот пример:

public SomeBaseResponse<SomeModel> FirstControllerAction(){
    // It can be anything else than SomeModel

    return new SomeBaseResponse<SomeModel> {
         StatusCode = 10,
         Message = "Success!",
         Result = new SomeModel(),
         Count = 1
    };
}

Вы можете создать любое количество конечных точек с различными общими типами. Это также помогает сохранять ваши ответы обобщенными и легко анализируемыми.

Swagger сгенерирует что-то вроде этого. (Это не фактическое представление модели, которую мы создали, это просто пример!) Нажмите здесь, чтобы посмотреть скриншот

...