ASP.Net Core Swagger Как игнорировать значения параметров по умолчанию - PullRequest
1 голос
/ 13 мая 2019

Есть ли способ "подавить" способ, которым SwaggerUI предварительно выбирает значения по умолчанию для необязательных параметров? Мы по-прежнему хотим, чтобы эти параметры были включены в сгенерированную документацию, просто без выбранного значения. Так работает в SwaggerUI 2.x, но похоже, что с 3.x

это не так

Правка - Добавление примера для уточнения моего вопроса.

В качестве примера - допустим, у вас есть следующая конечная точка:

[HttpGet]
public dynamic GetSomething(
     string filter1, 
     string filter2, 
     bool shouldIFilter = false, 
     SomeEnum enumValue = SomeEnum.Whatever)

В swagger, когда вы нажимаете «Попробуйте», поля ввода shouldIFilter и enumValue будут иметь значения по умолчанию, указанные в уже выбранной сигнатуре метода. Вместо этого я хочу, чтобы в этих полях не было выбрано какое-либо значение, чтобы они не включались в запрос при нажатии кнопки «Выполнить».

По сути, URL запроса должен выглядеть следующим образом: http://some.url.com/v3/search?filter1=afilter&filter2=anotherfilter

(без & shouldIFilter = false & enumValue = Независимо от этого)

--- РЕДАКТИРОВАТЬ: 20.05.2009 ---

Принимая предложение Хелдера, приведенное ниже, я попытался ввести js, чтобы справиться с этим. Первое, что я обнаружил, это то, что поля ввода не существуют, пока не нажата кнопка «Попробуйте». И эта кнопка не существует, пока вы не разверните конкретную операцию в списке!?! Однако после подключения наблюдателя для установки значений, как я хотел, когда элементы были добавлены в DOM, я могу успешно изменить выбранное значение.

Но , когда вы нажимаете на Выполнить, эти значения обновляются в соответствии с исходной спецификацией - и мои js не запускаются снова, чтобы изменить значения, которые я хочу, чтобы они были.

Я начинаю думать, что, возможно, это невозможно. Хотя я думаю, что я могу попытаться создать плагин SwaggerUI, который мог бы сделать это, но я не ожидаю большого успеха и там.

У кого-нибудь еще есть идеи?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Чтобы завершить этот цикл, я хотел поделиться тем, что в итоге сделал, чтобы решить эту проблему (хотя мы еще не решили, будем ли мы на самом деле двигаться вперед).

Попытка внедрить JS закончилась излишним хлопотом из-за Swagger UI 3.x с использованием реакции - я смог изменить выбранные значения в пользовательском интерфейсе для определенных параметров, но как только вы нажали «выполнить», они » сброс »вернуться к значениям по умолчанию.

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

public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
   if (parameter.In != ParameterLocation.Query) return;

   // readonly list to limit which parameters have this applied
   if (_parametersToUnSet.Contains(parameter.Name))
   {
       parameter.Description = $"*Default value*: {parameter.Schema.Default}";
       parameter.Schema.Default = null;
   }
 }
0 голосов
/ 14 мая 2019

Звучит так, как будто вы использовали значения по умолчанию для документирования параметра ...
Вы должны использовать поле описания для этого, вот пример:

"parameters": [
    {
        "name": "x.lat",
        "in": "query",
        "description": "**Latitude**: a geographic coordinate that specifies the north–south position of a point on the Earth's surface.",
        "required": false,
        "type": "number",
        "format": "float",
        "maximum": 90,
        "minimum": -90
    },
    {
        "name": "x.lon",
        "in": "query",
        "description": "**Longitude**: a geographic coordinate that specifies the east-west position of a point on the Earth's surface.",
        "required": false,
        "type": "number",
        "format": "float",
        "maximum": 180,
        "minimum": -180
    }
],

Это вswagger-ui будет выглядеть следующим образом:
http://swagger -net-test.azurewebsites.net / swagger / ui / index? filter = Location # / Location / Location_Get2

Коддля этой модели здесь:
https://github.com/heldersepu/Swagger-Net-Test/blob/master/Swagger_Test/Models/Location.cs


Если необходимо сохранить значения по умолчанию, вам придется ввести JS в swashbuckle, чтобы отключить эту функцию, нокоторый может сломаться, если пользовательский интерфейс изменится

...