c# - 一个或多个实体的 C# MVC 验证失败
问题描述
我已经与这个问题作斗争了一个多星期,现在我已经阅读了包括 StackOverflow 在内的在线文章,我遇到了一些类似的文章,但我遇到的文章都没有解决我的问题。
以下是错误:
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。
这是我的帐户控制器:
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new User() { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
以下是您的建议后我的新代码:
// POST: /帐户/注册
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
try
{
if (ModelState.IsValid)
{
var user = new User() { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
foreach (var errors in ex.EntityValidationErrors)
{
foreach (var validationError in errors.ValidationErrors)
{
// get the error message
string errorMessage = validationError.ErrorMessage;
//Or log your error message here
}
}
throw;
}
}
我犯了同样的错误。
解决方案
尝试DbEntityValidationException
通过对您的 api 方法使用 try/catch 块来捕获类型异常,
catch (DbEntityValidationException ex)
{
foreach (var errors in ex.EntityValidationErrors)
{
foreach (var validationError in errors.ValidationErrors)
{
// get the error message
string errorMessage = validationError.ErrorMessage;
//Or log your error message here
}
}
}
所以最后你的方法看起来像,
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
try
{
if (ModelState.IsValid)
{
var user = new User() { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
catch (DbEntityValidationException ex)
{
foreach (var errors in ex.EntityValidationErrors)
{
foreach (var validationError in errors.ValidationErrors)
{
// get the error message
string errorMessage = validationError.ErrorMessage;
//Or log your error message here
}
}
throw;
}
}
注意:确保最后,上述方法不会给您检测到无法访问的代码并返回适当的消息或视图或数据。
推荐阅读
- node.js - How to stub AWS.SQS.sendMessage with Sinon?
- couchdb - How to update a portion of the document in couch db using update function and CURL
- android - 单击布局时快速灰色背景
- python-3.x - 在 Python 中使用 BeautifulSoup 获取图像“src”时获得不同的值,而不是在浏览器中检查其“src”时
- javascript - iframe 中的 window.devicePixelRatio 不正确
- php - 如何使用laravel将不同的数组插入到不同的列数据库中
- sed - 将行号附加到 sed 中的选定行
- c# - 为搜索模型向后拆分 linq 字符串列表
- android - 如何使用改造刷新 lambda API 生成的令牌?
- azure - 如何在 azure devops 工作项屏幕中显示所有工作项