我的模型都用验证规则进行了注释。
我已经设置了一个控制器存储方法来创建一个新模型。
在制作流的副本之后,我从请求正文中解析了 JSON,以便以后仍然可以访问它。
我现在只是想实际使用这些注释,而不必做一大堆……这个:
if (!json.ContainsKey("name")) {
throw new Exception("Name is not set.");
}
if (!json["name"].GetType().Equals(typeof(String))) {
throw new Exception("Name is not a string");
}
string name = ((string) json["name"]).Trim();
if (name.Length == 0) {
throw new Exception("Name cannot be empty");
}
if (name.Length > 100) {
throw new Exception("Name must be less than 100 characters.");
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何不会做出一堆盲目假设的东西。这,例如,是没有意义的; 为什么我会关心一个还不存在的对象的 ModelState 呢?就此而言,我为什么要关心模型在更新端点上的入口点的状态?难道它不应该在插入数据库之前修复吗?
// POST: Movies/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind("ID,Title,ReleaseDate,Genre,Price, Rating")] Movie movie)
{
if (ModelState.IsValid)
{
_context.Add(movie);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(movie);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Newtonsoft 的 JSON.NET Schema,它引入了很多强硬和矛盾的要求(除了付费和闭源),使用起来很痛苦。请不要推荐那个。
ModelStateDictionary(由ControllerBase.ModelState财产公开):
表示尝试将值从 HTTP 请求绑定到操作方法的状态,其中包括验证信息。
因此,您应该完全出于您指定的原因来关心它 - “现在使用这些注释而不必做一大堆......”。
框架将尝试将来自传入请求的数据绑定到您的模型(即Movie movie在您的代码中),分析您指定的验证注释并将结果反映在ModelState,即如果没有错误 -ModelState.IsValid返回true- 否则返回false相应的错误保存到它。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |