Я недавно начал использовать ASP.NET Boilerplate в качестве отправной точки для проекта, над которым я работаю - Asp.NET Core Web Api + Angular, и у меня возникают проблемы с поиском некоторой информации относительно того, что мне кажетсякак проблема общего пользования.Я постараюсь объяснить, что я имею в виду, как могу.
Я хочу иметь конечную точку API, которая принимает параметр, который должен быть ограничен определенным набором значений - поэтому яхотел использовать Enum для этой цели.
Это все хорошо работает, когда идет проверка параметров, но я не совсем понимаю, как сделать так, чтобы это работало хорошо с сервисами, генерируемыми swagger и прокси-сервером общего доступа для шрифта Nswag.
Параметр Enum isотображается как целое число в примере параметра документации, поэтому не ясно, просто взглянув на документацию swagger, каков набор доступных значений, потому что значения int не имеют значения для пользователя, который просматривает документацию.
Давайте использовать пример, подобный этому, пользовательский ввод, используемый в одном из методов обслуживания приложения:
Метод обслуживания:
public async Task DoSomething(SomethingInput input)
{
//some code handling user input
}
Ввод DTO:
public class SomethingInput : EntityDto<string>
{
[EnumDataType(typeof(SomethingEnum))]
public SomethingEnum Something { get; set; }
public int SomeOtherData { get; set; }
}
Enum:
public enum SomethingEnum
{
Option1,
Option2,
Option3
}
В этом случае доступные значения SomethingEnum в SomethingInput будут отображаться как 0, 1, 3 вместо «Option1», «Option2», «Option2».
Я пыталсяиспользование DescribeAllEnumsAsStrings для параметров генерации чванства, которое помогает с документацией, но создает проблему в функциональности проекта Angular - если быть конкретным, измененоВ этом случае происходит сбой арендатора из-за способа создания перечислений с помощью инструмента DescribeAllEnumsAsStrings с помощью инструмента Nswag - он ожидает, что значения будут целыми числами, а не строками.
export enum IsTenantAvailableOutputState {
Available = <any>"Available",
InActive = <any>"InActive",
NotFound = <any>"NotFound",
}
Значение ответа, возвращаемое API, является числовым, и этот код незнать, как правильно анализировать значение, потому что enum больше не имеет целочисленных значений:
export class AppTenantAvailabilityState {
static Available: number = IsTenantAvailableOutputState._1;
static InActive: number = IsTenantAvailableOutputState._2;
static NotFound: number = IsTenantAvailableOutputState._3;
}
Вопрос здесь в том, каков наилучший способ использования таких ограниченных параметров в маршрутах или объектах DTO, используемых в качестве пользователя.входные данные, чтобы они правильно отображались в документах Swagger и ничего не ломали в угловом проекте при регенерации общих прокси с помощью инструмента Nswag?