使用 Swagger 为 Web API 模型 类 设置命名规则

Setting up naming rules for Web API model classes using Swagger

下午好。 我有以下控制器方法:

/// <summary>
/// Метод создания вида работ
/// </summary>
/// <param name="name">Название вида работ</param>
/// <param name="workUnitId">ИД единицы вида работ</param>
/// <returns>Результат создания вида работ</returns>
[Route(nameof(CreateWorkType))]
[HttpPost]
public async Task<ActionResult<DtoResult<DtoWorkType>>> CreateWorkType(string name, Guid? workUnitId = null)
{
     try
     {

          var result = await _workTypeService.CreateWorkType(name, workUnitId).ConfigureAwait(false);

          return Ok(result);
     }
     catch
     {
          return BadRequest($"Ошибка при выполнении создания вида работ с именем \"{name}\" и ИД единицы работ \"{workUnitId}\"");
     }
}

使用的方法是通用的class DtoResult:

/// <summary>
/// Класс результат
/// </summary>
/// <typeparam name="T">Тип данных сущности</typeparam>
public class DtoResult<T> where T : class, new()
{
    #region Свойства

    /// <summary>
    /// Результат проверки сущности типа данных <see cref="T"/>
    /// </summary>
    public DtoValidationResult Validation { get; set; } = new DtoValidationResult();

    /// <summary>
    /// Данные сущности типа данных <see cref="T"/>
    /// </summary>
    public T Data { get; set; } = new T();

    #endregion
}

“业务”类 DtoWorkType:

 /// <summary>
/// Класс вида работ
/// </summary>
public class DtoWorkType
{
    #region Свойства

    /// <summary>
    /// ИД вида работ
    /// </summary>
    public Guid Id { get; set; }

    /// <summary>
    /// Название вида работ
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// Единица работ для вида работ
    /// </summary>
    public DtoWorkUnit WorkUnit { get; set; } = new DtoWorkUnit();

    #endregion
}

使用 Swagger,自动创建了一个名为 DtoWorkTypeDtoResult 的 class。

问题: 是否可以使用SWAGGER配置工具或其他机制来确定class的名称,例如使用以下算法:

$"{nameof(T)}Result"

对于 class 具有以下名称:DtoWorkTypeResult

不像现在:DtoWorkTypeDtoResult

您可以使用方法CustomSchemaIds来配置swagger:

 services.AddSwaggerGen(c =>
        {
            //other code
            c.CustomSchemaIds(p => p.Name);

        });