新闻中心

.NET Web API如何进行模型验证

2025-10-31
浏览次数:
返回列表
在 .NET Web API 中,模型验证通过数据注解和 ModelState 实现,1. 使用 Required、StringLength 等特性标注模型属性;2. 框架在绑定后自动验证并填充 ModelState;3. 在 Action 中通过 ModelState.IsValid 判断结果,失败则返回 400 及错误详情;4. 复杂规则可自定义 ValidationAttribute;5. 可通过全局过滤器自动处理验证,提升代码复用与一致性。

.net web api如何进行模型验证

在 .NET Web API 中进行模型验证,主要是通过数据注解(Data Annotations)和内置的模型绑定机制来实现。当客户端提交数据时,框架会自动根据模型上的特性进行校验,并将结果写入 ModelState,开发者可以据此判断请求是否合法。

使用数据注解进行基本验证

最常见的做法是在模型属性上添加验证特性。例如:

public class Product
{
    [Required(ErrorMessage = "名称是必填的")]
    [StringLength(100, MinimumLength = 2, ErrorMessage = "名称长度必须在2到100之间")]
    public string Name { get; set; }

    [Range(1, 1000, ErrorMessage = "价格必须在1到1000之间")]
    public decimal Price { get; set; }

    [EmailAddress(ErrorMessage = "邮箱格式不正确")]
    public string Email { get; set; }
}

这些特性会在模型绑定完成后自动触发验证。

在控制器中检查验证状态

在 Action 方法中,使用 ModelState.IsValid 判断模型是否通过验证:

[HttpPost]
public IActionResult Create([FromBody] Product product)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // 处理业务逻辑
    return CreatedAtAction(nameof(GetById), new { id = 1 }, product);
}

如果验证失败,返回 400 Bad Request 并附带错误信息,这对前端调试非常有用。

自定义验证逻辑

对于复杂规则,可以继承 ValidationAttribute 创建自定义特性:

NameGPT NameGPT

免费的名称生成器,AI驱动在线生成企业名称及Logo

NameGPT 119 查看详情 NameGPT
public class FutureDateAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value is DateTime date && date > DateTime.Now)
        {
            return ValidationResult.Success;
        }
        return new ValidationResult("日期必须是将来的时间。");
    }
}

然后在模型中使用:

public class Order
{
    [FutureDate]
    public DateTime DeliveryDate { get; set; }
}

启用自动模型验证过滤器(可选)

为避免每个 Action 都写 if (!ModelState.IsValid),可以全局配置自动响应:

// 在 Program.cs 或 Startup.cs 中
builder.Services.AddControllers(options =>
{
    options.Filters.Add(new ValidateModelAttribute());
});

这样,所有不符合验证规则的请求会自动返回 400 响应,无需手动检查。

基本上就这些。合理使用数据注解能让验证变得简洁可靠,结合自定义规则还能应对复杂场景。关键是理解 ModelState 的作用机制,以及如何让错误信息清晰传达给调用方。

以上就是.NET Web API如何进行模型验证的详细内容,更多请关注php中文网其它相关文章!


# 复用  # 邯郸互联网营销推广外包  # 衡水网站开发建设  # 佳能淘宝网站推广方案  # 新公司网站适合做推广吗  # 南海网站推广厂家  # 广西网站建设.com  # 郑州定制网站建设哪家好  # 脑白金营销推广目的  # 网站建设用户量分析  # 奉节县网站推广怎么收费  # 会在  # 还能  # 是在  # php  # 更胜  # 对决  # 错误信息  # 更有  # 绑定  # 自定义  # red  # .net  # 代码复用  # 邮箱  # ai  # 前端  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 漫蛙漫画登录站点 漫蛙2正版漫画快速访问  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  CSS子选择器:如何区分并样式化嵌套列表的子层级  如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  在python-socketio事件处理器中安全访问Flask应用上下文  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  C++ explicit关键字防止隐式转换_C++构造函数安全规范  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  React列表渲染与独立状态管理:避免全局状态影响局部更新  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南  qq游戏大厅官方下载_qq游戏免费下载安装入口  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  MongoDB聚合管道:正确匹配对象数组中_id的方法  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  b站如何看历史记录_b站观看历史找回方法  12306几点到几点不能订票? | 官方最新系统维护时间全解析  微信网页版官方快速登录入口 微信网页版网页版账号直达  抖音网页版怎么|直播|_抖音网页版开播操作指南  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  J*aScript生成器_j*ascript异步迭代  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  多闪网页版在线观看免费入口_多闪官网访问入口  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  必由学网页版入口 必由学官方平台直接访问  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  Node.js中HTML按钮与J*aScript函数交互的正确姿势  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  在J*a项目里如何构建对象之间的契约_接口约束的实际落地  实现分段式页面滚动导航:CSS与J*aScript教程  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  React/Next.js中实现列表项的动态选择与移动  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  动漫花园资源网使用步骤_动漫花园资源网下载流程  c++如何使用Meson构建系统_c++比CMake更快的构建工具 

搜索