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

在 .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
免费的名称生成器,AI驱动在线生成企业名称及Logo
119
查看详情
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更快的构建工具


2025-10-31
浏览次数:次
返回列表