Asp.net core 当传入错误的枚举值时,如何在ASP.NET Core中获取自定义ModelState错误消息?

Asp.net core 当传入错误的枚举值时,如何在ASP.NET Core中获取自定义ModelState错误消息?,asp.net-core,asp.net-core-webapi,data-annotations,Asp.net Core,Asp.net Core Webapi,Data Annotations,我正在将一个模型传递给一个API操作,该操作具有一个名为eventType的属性,该属性是一个可为空的自定义枚举 如果我为eventType传递一个随机值,比如“h”,它将无法序列化正确的值 然而,我从ModelState得到的错误并不是我希望公共调用方看到的。它包括行号和位置(见下文) 我尝试了许多选项,包括自定义数据注释,但都没有成功 有人知道我如何定义更好的自定义消息吗 将值“h”转换为类型时出错 'System.Nullable'1[Custom.EventTypes]'。路径'even

我正在将一个模型传递给一个API操作,该操作具有一个名为eventType的属性,该属性是一个可为空的自定义枚举

如果我为eventType传递一个随机值,比如“h”,它将无法序列化正确的值

然而,我从ModelState得到的错误并不是我希望公共调用方看到的。它包括行号和位置(见下文)

我尝试了许多选项,包括自定义数据注释,但都没有成功

有人知道我如何定义更好的自定义消息吗

将值“h”转换为类型时出错 'System.Nullable'1[Custom.EventTypes]'。路径'eventType',第1行, 位置80。”


大多数情况下,第一个错误通常是最重要的错误,或者更确切地说是正确描述情况的错误。您可以使用这种方式来操纵从第一个键获取第一条错误消息,或者如果希望获取所有错误消息,可以将其更改为任何您想要的

public ActionResult GetMyMoney(MyModel myModel)
{
  string nss = ModelState.First().Key;
  ModelError[] ern = ModelState[nss].Errors.ToArray();
  string ndd = ern.First().ErrorMessage;
}
您可以像上面提到的那样编写自定义过滤器,并将自定义对象与消息一起传递。
Ref:

我认为可以使用定制的StringToEnum转换器,但需要一种更简单的方法。根本不知道如何以一种简单的方式解决它。不幸的是,Api验证消息不是很理想。但有一点是行号和位置来自输入json,而不是代码中的行。
public class CustomFilter: IAsyncActionFilter
{
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        if (!context.ModelState.IsValid)
        {
            // You can pass custom object to BadRequestObjectResult method
            context.Result = new BadRequestObjectResult(customObject);
        }
    }
}