【经验分享】在ASP.NET Core中,如果禁用某个请求的模型验证?
这是一个来自网友【David】的提问。
在 AppBoxCore 项目的新增用户页面,新增一个上传按钮:
1 | < f:FileUpload ID="filePhoto" ShowRedStar="false" ShowEmptyLabel="true" ButtonText="上传个人头像" <br>ButtonOnly="true" Required="false" ButtonIcon="ImageAdd" OnFileSelected="@Url.Handler("filePhoto_FileSelected")" < br >OnFileSelectedFields="filePhoto"></ f:FileUpload > |
后台代码:
1 2 3 4 5 6 7 8 9 10 11 | public IActionResult OnPostFilePhoto_FileSelected(IFormFile filePhoto, IFormCollection values) { if (filePhoto != null ) { string fileName = filePhoto.FileName; // 。。。 } return UIHelper.Result(); } |
此时上传照片时,会弹出错误提示框(截图所示)。
The 用户名 field is required.
The 邮箱 field is required.
The 性别 field is required.
The 密码 field is required.
这是因为页面模型中定义了一个绑定属性:
1 2 3 4 5 6 7 8 | [CheckPower(Name = "CoreUserNew" )] public class UserNewModel : BaseAdminModel { [BindProperty] public User CurrentUser { get ; set ; } // ... } |
而在 POST 请求中会触发模型绑定,如果发现模型不完整就会报错。这个错误提示框是由 FineUICore 框架处理的,无需自己写代码。
现在问题就来了!
====================
对于上述场景,仅仅是上传图片而无需验证 CurrentUser 模型属性,该如何处理呢?
其实也很简单,只需要在处理器中清空模型状态就可:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public IActionResult OnPostFilePhoto_FileSelected(IFormFile filePhoto, IFormCollection values) { ModelState.Clear(); if (filePhoto != null ) { string fileName = filePhoto.FileName; // 。。。 } return UIHelper.Result(); } |
Done!
====================
这个问题也确实让我走了不少弯路,刚开始总想着如何禁用某些POST请求的模型验证,想着微软总能为处理器(Handler)提供一些注解(Annotation)来吧,结果查了一圈没有发现!
后来,想着换个思路:既然找不到禁用的方法,就清空模型状态,结果也是一样的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2009-04-30 Confused with JavaScript prototype