ZetCode

ASP.NET ModelState

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 ModelState。ModelState是处理 Web 应用程序中的模型验证和错误报告的关键组件。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。ModelState 提供了一种跟踪模型数据验证状态的方法。

基本定义

ASP.NET 中的 ModelState 代表模型绑定和验证的状态。它包含有关提交值、验证错误和模型状态的信息。

ModelState 属性可以通过 ControllerBase 类在控制器中访问。它是一种类似字典的结构,用于保存每个属性的模型绑定和验证结果。

使用 [ApiController] 属性时,ModelState 会在模型绑定期间自动填充。它通常用于在处理请求之前检查验证结果。

ASP.NET ModelState 示例

以下示例演示了如何在 Web API 控制器中使用 ModelState 进行验证。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。AddControllers 方法启用了模型绑定和验证。

Controllers/UsersController.cs
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult CreateUser([FromBody] UserDto user)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        // Process valid user data
        return Ok(new { Message = "User created successfully", User = user });
    }
}

public class UserDto
{
    [Required(ErrorMessage = "Username is required")]
    [StringLength(50, MinimumLength = 3)]
    public string Username { get; set; }

    [Required(ErrorMessage = "Email is required")]
    [EmailAddress(ErrorMessage = "Invalid email format")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Password is required")]
    [StringLength(100, MinimumLength = 8)]
    [RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$", 
        ErrorMessage = "Password must be complex")]
    public string Password { get; set; }

    [Range(18, 120, ErrorMessage = "Age must be between 18 and 120")]
    public int Age { get; set; }
}

此控制器演示了用户创建终结点的 ModelState 验证。CreateUser 方法在处理之前检查 ModelState.IsValid。

当验证失败时,它会返回一个 400 Bad Request 响应,其中包含 ModelState 错误。UserDto 类使用数据注解属性定义验证规则。

[Required] 属性确保字段不能为空。[StringLength] 验证长度限制。[EmailAddress] 检查电子邮件格式。[RegularExpression] 验证密码复杂性。

该示例展示了 ModelState 如何自动收集数据注解中的验证错误。它提供了一种在 API 响应中处理验证失败的一致方法。

来源

Microsoft ASP.NET 模型验证文档

在本文中,我们探讨了 ASP.NET 8 中的 ModelState。这一强大功能简化了 Web 应用程序中的模型验证和错误处理。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程