小编BRB*_*dot的帖子

在 Swagger 下拉列表和 json 上显示 Enum 成员友好名称

我试图让枚举以大肆展示和响应时的描述(或任何其他属性)中的友好名称。还尝试解析控制器操作中主体/查询字符串上设置的友好名称,而不尝试 400 BadRequest 或任何类型的验证错误。我还注意到,我拥有的自定义通用 JsonConverter 也无法正常工作。该ReadJson()方法根本没有被调用。我怎样才能让它发挥作用?

[JsonConverter(typeof(JsonEnumConverter<SortDirectionType>))]
public enum SortDirectionType
{
    [Description("asc")]
    ASCENDING,
    [Description("desc")]
    DESCENDING
}
Run Code Online (Sandbox Code Playgroud)

我试图让 swagger-ui 将 asc 和 desc 显示为下拉列表中的值,而不是升序和降序。这意味着我无法使用c.DescribeAllEnumsAsStrings(). 如果我不使用它,那么下拉列表将显示 0,1,因为它应该代表枚举成员值。现在我可以使用[EnumMember(Value="asc"]属性而不是[Description("asc")]属性。然而接下来发生了两件事:

  1. swagger-ui 抛出客户端验证并突出显示周围有红线的字段
  2. 或者,如果我尝试在 swagger 之外调用端点,它会返回 400 错误。
  3. 我能够在操作[FromBody]参数中成功使用 0,1 或 ASCENDING、DESCENDING 值。然而,这并不是我们所期望的。我将接收 asc、desc 并希望能够在主体模型上成功解析它并将其映射到枚举属性。另一方面,当 json 呈现时,它应该呈现友好的名称。

附加代码:

public class JsonEnumConverter<T> : JsonConverter where T : struct, IComparable, IConvertible, IFormattable
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(T);
    }

    public override object ReadJson(JsonReader …
Run Code Online (Sandbox Code Playgroud)

c# enums model-binding asp.net-core

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

asp.net-core ×1

c# ×1

enums ×1

model-binding ×1