You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6.0+正确识别模型绑定失败的方法及场景

模型绑定失败的正确识别方法及相关场景咨询

我已查阅MSDN文档的以下内容:

  • 模型属性无数据源
  • 类型转换错误

我构造了一个Swagger请求无法绑定到服务器模型的场景,代码如下:

OrderController.cs

[HttpPost]
public async Task<IActionResult> CreateAsync(OrderViewModel viewModel)
{
    // 将模型映射并添加到数据库
    // 返回201状态码
}

发送的请求输入为:

{
    null
}

这导致模型绑定失败,我通过FailedValidationResultFilter处理该情况:

FailedValidationResultFilter.cs

public class FailedValidationResultFilter : IResultFilter
{
    public void OnResultExecuted(ResultExecutedContext context)
    {
    }

    public void OnResultExecuting(ResultExecutingContext context)
    {
        // 判断模型绑定是否失败
        var hasModelBindingFailed = context.ModelState.Any(pair => String.IsNullOrEmpty(pair.Key));
        if (hasModelBindingFailed)
        {
            // 处理模型绑定失败的逻辑
            // 返回BadRequestObjectResult
        }

        // 处理验证属性失败的情况
        var invalidParams = new Dictionary<String, String[]>(context.ModelState.Count);
        foreach (var keyModelStatePair in context.ModelState)
        {
            var key = keyModelStatePair.Key;
            var modelErrors = keyModelStatePair.Value.Errors;

            if (modelErrors is not null && modelErrors.Count > 0)
            {
                var errorMessages = modelErrors.Select(error => error.ErrorMessage).ToArray();
                invalidParams.Add(key, errorMessages);
            }
        }

        var problemDetails = new ProblemDetails
        {
            Type = "123",
            Title = "Invalid parameters",
            Status = StatusCodes.Status400BadRequest,
            Detail = "Your request parameters didn't validate.",
            Instance = ""
        };
        problemDetails.Extensions.Add(nameof(invalidParams), invalidParams);

        context.Result = new BadRequestObjectResult(problemDetails);
    }
}

调试时发现模型绑定失败会生成两个ModelState键值对:

  • { "", "Some error message" }
  • { "viewModel", "Again some error message" }

我目前通过检查ModelState中是否存在空键来判断模型绑定失败,但认为这种方法并不恰当。现咨询:

  1. 正确识别模型绑定失败的方法是什么?
  2. 还有哪些输入会导致模型绑定失败但不会出现空键?

内容的提问来源于stack exchange,提问作者phougatv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:39