SwashBuckle Swagger-UI Пример запроса для метода HTTP GET с атрибутом FromQuery - PullRequest
0 голосов
/ 09 марта 2020

Мне удалось добавить примеры в мой веб-API с помощью SwashBuckle.AspNetCore и Swashbuckle.AspNetCore.Filters для методов POST:

DTO

public class ExampleDTO
{
    public string MyFoo { get; set; }
}

Пример запроса

public class ExampleDTOExample : IExamplesProvider<ExampleDTO>
{
    public ExampleDTO GetExamples()
    {
        return new ExampleDTO()
        {
            MyFoo = "bar"
        };
    }
}

Метод контроллера

[SwaggerOperation(
    Summary = "...",
    Description = "...",
    OperationId = "PostFoo"
)]
[SwaggerResponse(200, "Returns ...", typeof(int))]
[HttpPost]
[Route("post-foo")]
public ActionResult<int> PostFoo([FromBody]ExampleDTO request)
{
    throw new NotImplementedException();
}

Это прекрасно работает. Когда я нажимаю кнопку «попробовать», в качестве предварительно заданного значения свойства foo появляется «bar».

Однако, когда я пытаюсь сделать то же самое для запроса GET, например, с параметрами из этого запроса текстовое поле не заполняется значением «bar»:

enter image description here

public class ExampleDTO
{
    [FromQuery(Name = "foo")]
    public string MyFoo { get; set; }
}

Метод контроллера

[SwaggerOperation(
    Summary = "...",
    Description = "...",
    OperationId = "GetFoo"
)]
[SwaggerResponse(200, "Returns ...", typeof(int))]
[HttpGet]
[Route("get-foo")]
public ActionResult<int> GetFoo([FromQuery]ExampleDTO request)
{
    throw new NotImplementedException();
}

Как принудительно заполнить текстовое поле значением примера? До сих пор я нашел решение для указания значения по умолчанию, которое я не хочу. Я только хочу использовать атрибуты для значения по умолчанию в Swagger UI.

1 Ответ

0 голосов
/ 09 марта 2020

Если я не ошибаюсь, значение, которое вы видите на:

Это не пример, а значение по умолчанию.


Вот что я делал в прошлом:

"/attrib/{payId}": {
    "get": {
        "tags": [
            "Attribute"
        ],
        "operationId": "Attribute_Get",
        "consumes": [],
        "produces": [
            "application/json",
            "text/json",
            "text/html"
        ],
        "parameters": [
            {
                "name": "payId",
                "in": "path",
                "required": true,
                "type": "integer",
                "format": "int32",
                "default": 123
            }
        ]

http://swagger-net-test.azurewebsites.net/swagger/ui/index?filter=Attribute# / Attribute / Attribute_Get


Здесь приведен еще один случай с использованием по умолчанию и примера

"Company": {
    "required": [
        "Id",
        "MyId"
    ],
    "properties": {
        "Id": {
            "description": "The Unique Company ID",
            "example": "123",
            "type": "integer",
            "format": "int32",
            "default": 456
        },
        "MyId": {
            "example": 123,
            "type": "integer",
            "format": "int32"
        },

http://swagger-net-test.azurewebsites.net/swagger/ui/index# / Company / Company_Get2

Вы можете видеть, что пример не тот, что показан в Swagger UI

...