我发现这个很好type-safe enum pattern, 我认为非常酷。
该类只有公共静态属性和private constructor
,并且可以从string
隐式推断。我正在使用它作为我的模型的属性,当我传递model-binded
时,它在asp.net核心web api控制器中正确获取string
。传递无效的string
值也可以正常工作,因为binder
能够设置ModelSate=false
。我有这样的话:
class Mymodel
{
public TypeSafeEnum TypeSafeEnum { get; set; }
public string Name { get; set; }
// the rest of props
}
投掷一些昂首阔步的api文档,该属性被视为一个对象,因此swagger试图帮助将示例输入模型:
{
"typeSafeEnum": {},
"name": "string",
// the rest
}
swagger只看到一个没有公共属性的物体。
是否存在一种夸张的形式,我实际上期待string
?或者我是否会欺骗我的客户,因为并非所有字符串值都有效?但是我又如何提供有意义的提示呢?
答案 0 :(得分:0)
如果属性是字符串,Swagger会将其记录为字符串。字符串显然可以接受任何东西。如果您只想将某些值传入字符串,并且希望在Swagger文档中清楚地记录它,请使用枚举。您也可以使用属性验证器,如正则表达式(或编写自己的自定义验证器),但它们没有记录,只有在验证失败时才会显示。即对于正则表达式,如果它没有正则表达式,它会返回一个Json,说这个字段没有这个正则表达式,但正则表达式没有显示在swagger doc中。