我最近开始使用 ASP.NET Boilerplate 作为我正在处理的项目的起点 - Asp.NET Core Web Api + Angular,但我无法找到一些在我看来很常见的信息使用问题。我会尽力解释我的意思。
我想要做的是有一个 API 端点,它接受一个需要限制为一组特定值的参数 - 所以,我想为此目的使用 Enum。
就参数验证而言,这一切都很好,但我很困惑如何使这与 Nswag 为 fontend 的 swagger 和共享代理生成的服务一起工作。
Enum 参数在文档参数示例中显示为整数,因此仅通过查看 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; }
}
枚举:
public enum SomethingEnum
{
Option1,
Option2,
Option3
}
在这种情况下,SomethingInput 中 SomethingEnum 的可用值将显示为 0、1、3,而不是“Option1”、“Option2”、“Option2”。
我尝试将 DescribeAllEnumsAsStrings 用于有助于文档的大摇大摆生成选项,但它在 Angular 项目功能中产生了一个问题 - 具体而言,更改租户失败,因为 Nswag 工具使用 DescribeAllEnumsAsStrings 生成枚举的方式 - 它期望值是整数,而不是字符串。
export enum IsTenantAvailableOutputState {
Available = <any>"Available",
InActive = <any>"InActive",
NotFound = <any>"NotFound",
}
API返回的响应值是数字,这段代码不知道如何正确解析该值,因为枚举不再有整数值:
export class AppTenantAvailabilityState {
static Available: number = IsTenantAvailableOutputState._1;
static InActive: number = IsTenantAvailableOutputState._2;
static NotFound: number = IsTenantAvailableOutputState._3;
}
这里的问题是,在路由或 DTO 对象中使用这些受限参数作为用户输入的最佳实践是什么,以便它们在 swagger doc 中正确显示,并且在重新生成共享代理时不会破坏 angular 项目中的任何内容使用 Nswag 工具?