当我们在 web api 中检查模型状态时,如何 return 另一种类型而不是 ModelStateDictionary?

How to return another type instead of ModelStateDictionary when we check modelstate in web api?

我们有一个名为 Modelstate 的东西,return 一个 ModelStateDictionary 我发现我们可以在我们的模型属性上放置一些属性并检查 ModelState.IsValid 并且如果需要某些东西并且为空 当我们 return 模型状态显示错误时,我想要的是使用该属性并检查 ModelState.IsValid 但我想 return 我的 return 类型格式

我对 api 的输入是:

public class Input
{
    [Required]
    public string Name { get; set; }
    [Required]
    [Range(500, 50000)]
    public int AccountBalance{ get; set; }
}

我的 api 输出是这样的:

public  class Output
{
    public string ErrorDetail { get; set; }
    public int ErrorCode { get; set; }
}

我想在我的控制器中检查验证

       if (!ModelState.IsValid)
        {

     //based on which property has problem I want to decide about the return 
      //error code
        return new Output
                {
                    Description = "error about name",
                    ErrorCode = "1020"
                }

            }

有什么方法可以干净地做到这一点吗?

只需使用ApiControllerContent<T>方法:

if (!ModelState.IsValid)
{
    return Content(HttpStatusCode.BadRequest, new Output
    {
        ErrorDetail = "error about name",
        ErrorCode = "1020"
    });
}

它协商内容和 returns 提供的 HTTP 状态代码。

请注意,400 BadRequest 是在存在无效请求(例如验证失败)时使用的常用 HTTP 错误状态代码。