У меня есть API (ASP.NET Core 3.0), который позволяет пользователям выполнять поиск в базе данных документов, используя различные параметры запроса для фильтрации и упорядочения результатов. Одним из параметров является Order
параметр, который определяет порядок упорядочения результатов. Допустимые значения ограничены значениями перечисления.
Теперь мне нужно добавить больше поведения в перечисление, поэтому я переписал его как Класс перечисления , чтобы я мог добавитьобъектно-ориентированное поведение к нему. Теперь у меня проблема в том, что Swashbuckle выравнивает свойства перечисления, а не оставляет его как один параметр. Вот мои перечисления и классы параметров:
// Enumeration
public class DocSearchOrder : Enumeration {
public static readonly DocSearchOrder DocType = new DocSearchOrder(2, nameof(DocType));
public static readonly DocSearchOrder DocTypeDesc = new DocSearchOrder(3, nameof(DocTypeDesc));
public static readonly DocSearchOrder DocDate = new DocSearchOrder(4, nameof(DocDate));
public static readonly DocSearchOrder DocDateDesc = new DocSearchOrder(5, nameof(DocDateDesc));
public DocSearchOrder(int value, string name) : base(value, name) {
}
}
// Search Parameters
public class DocSearchParameters {
public DocSearchOrder? Order { get; set; }
// Lots of other search parameters
}
Затем метод, который его использует:
public async Task<IActionResult> GetAsync([FromQuery] DocSearchParameters searchParams) {
// Do the search
}
Swashbuckle сглаживает searchParams.Order
в DocSearchOrder.Id
и DocSearchOrder.Name
. Поведение, которого я хочу добиться, заключается в том, чтобы мой интерфейс Swagger продолжал отображать выпадающий список доступных значений (DocSearchOrder.Name
), из которых пользователь может выбрать параметр с именем «Order». Затем вы передаете одно из этих строковых значений, и пользовательский связыватель модели преобразует строку в экземпляр класса Enumeration.
Я пытался написать пользовательский IOperationFilter
, но, похоже, это работает только для изменения схемы типовпередан методу GetAsync
, я не могу перехватить генерацию схемы для searchParams.Order
. Я думал, что смогу каким-то образом перехватить генерацию схемы для любого свойства, которое является Enumeration
, и сгенерировать для него схему enum вместо схемы объекта, но я не знаю, как ее перехватить.
Итак, мой вопрос: есть ли способ настроить генерацию схемы для вложенного типа? Или есть другой способ сделать это, и я все делаю неправильно? :)