Использовать XML-комментарии свойств в качестве описаний параметров в Swagger

Я создал веб-API с помощью ASP.NET Core и использовал чванство для создания документации. Я использую XML-комментарии к своим конечным точкам API, чтобы предоставить дополнительную информацию в документации. Конфигурация чванства:

services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });

            // Set the comments path for the Swagger JSON and UI.
            var basePath = AppContext.BaseDirectory;
            var xmlPath = Path.Combine(basePath, "MyAPI.xml");
            c.IncludeXmlComments(xmlPath);
        });

Одна из моих конечных точек API и ее XML-комментарии:

    /// <summary>
    /// Find an existing appointment using the visitor information: First name, last name, email, phone.
    /// </summary>
    /// <url>http://apiurl/api/appointments/appointmentsByVisitor</url>
    /// <param name="criteria">consists of one or more of:  Firstname, lastname, email, phone</param>
    /// <returns>Existing appointment data in an Appointment object or a business error.</returns>
    /// <response code="200">Returns the existing appointment event.</response>
    /// <response code="400">Returns if no parameters are specified.</response>            
    /// <response code="204">Returns if there's no matching appointment.</response>
    /// <response code="500">Returns if there's an unhandled exception.</response>
    [Authorize]
    [HttpGet("appointmentsByVisitor")]
    [ProducesResponseType(typeof(Appointment), 200)]
    [ProducesResponseType(typeof(BusinessError), 404)]
    public IActionResult AppointmentsByVisitor([FromQuery] VisitorSearchCriteria criteria) {}

VisitorSearchCriteria - это отдельный класс, который является оболочкой для параметров, ожидаемых конечной точкой API.

public class VisitorSearchCriteria
{
    /// <summary>
    /// Visitor first name.
    /// </summary>
    public string FirstName { get; set; }

    /// <summary>
    /// Visitor last name.
    /// </summary>
    public string LastName { get; set; }

    // several other properties....
}

Документация swagger для этой конечной точки API показывает все свойства VisitorSearchCriteria как параметры, но не выбирает комментарии XML. Смотрите скриншот ниже.

Список параметров Swagger

Как видите, описания параметров отсутствуют. Как мне сказать Swagger использовать XML-комментарии из этого внешнего класса для создания описаний параметров?


person devC    schedule 17.01.2018    source источник
comment
Вы установили флажок для файла документации xml в проекте?   -  person LiverpoolOwen    schedule 17.01.2018
comment
Да, комментарии XML из конечной точки API отображаются в виде чванства, не отображаются только комментарии из этого другого класса.   -  person devC    schedule 17.01.2018
comment
Есть ли комментарии в вашем файле MyAPI.xml? + не забудьте также добавить комментарий к вашему классу.   -  person Wouter    schedule 17.01.2018
comment
У меня есть комментарии в классе VisitorSearchCriteria. Но их нет в файле MyAPI.xml. В xml-файле отображаются только те, которые находятся на контроллере.   -  person devC    schedule 17.01.2018
comment
Привет, вы нашли решение этой проблемы?   -  person GoldenAge    schedule 18.04.2019
comment
@GoldenAge: Я этого не делал, но я собираюсь попробовать то, что упомянул user2534454.   -  person devC    schedule 24.04.2019


Ответы (2)


Если у вас есть класс модели, определенный в другом проекте, вам нужно перейти к Properties этого проекта и под Build/Output проверить параметр «XML-файл документации:». Затем вам нужно обновить добавление файла конфигурации swagger.

c.IncludeXmlComments($@"{System.AppDomain.CurrentDomain.BaseDirectory}\YourProjectName.xml");

YourProjectName.xml должен содержать описание полей вашего класса модели, конечно, в формате XML.

Если вы хотите импортировать комментарии из другого проекта, вам нужно сделать то же самое, что и выше, добавив

c.IncludeXmlComments($@"{System.AppDomain.CurrentDomain.BaseDirectory}\YourProjectName2.xml");

в файл конфигурации swagger.

Имейте в виду, что для каждого проекта может быть создан файл XML, и вы можете добавлять комментарии из всех этих файлов в пользовательский интерфейс Swagger. При запуске пользовательского интерфейса Swagger комментарии должны появиться в разделе «Модель».

person user2534454    schedule 22.04.2019

http://wmpratt.com/swagger-and-asp-net-web-api-part-1/

Во-первых, включите создание файла XML-документации во время сборки. В обозревателе решений щелкните правой кнопкой мыши проект веб-API и выберите «Свойства». Щелкните вкладку «Сборка» и перейдите к «Вывод». Убедитесь, что файл XML-документации отмечен. Вы можете оставить путь к файлу по умолчанию. В моем случае это bin \ SwaggerDemoApi.XML

person mike123    schedule 17.01.2018
comment
вообще-то все хорошо. Как я уже упоминал в вопросе, XML-документация конечной точки API отображается в документации. Это описания параметров, которые поступают из отдельного класса (VisitorSearchCriteria), которые не выбираются. - person devC; 17.01.2018
comment
Вы можете попробовать это c.IncludeXmlComments(string.Format(@"{0}\bin\MyAPI.xml", System.AppDomain.CurrentDomain.BaseDirectory)); и посмотреть, работает ли это? - person mike123; 17.01.2018
comment
Нет, не сработало. Я подозреваю, что MyAPI.xml не выбирает комментарии из вспомогательных классов, а только из контроллера? - person devC; 17.01.2018
comment
Попробуйте вместо этого использовать этот c.IncludeXmlComments(Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "xml")); и убедитесь, что ваш класс параметров находится в той же сборке, что и ваш контроллер. - person Lars Skovslund; 18.01.2018
comment
@Lars Skovslund Я пробовал это, и у меня это не сработало - person GoldenAge; 18.04.2019
comment
@GoldenAge мы используем метод расширения во всех наших проектах aspnet core 2.2. public static void IncludeXmlComments<TFromType>(this SwaggerGenOptions options) { options.IncludeXmlComments(Path.ChangeExtension(typeof(TFromType).Assembly.Location, "xml")); } Где универсальный тип - это любой класс, находящийся в сборке, из которой вы хотите включить XML-комментарии. - person Lars Skovslund; 26.04.2019