Проверка C # MVC не удалась для одного или нескольких объектов - PullRequest
0 голосов
/ 03 марта 2019

Я боролся с этой проблемой уже более недели, сейчас я прочитал статьи в Интернете, включая StackOverflow, я сталкивался с некоторыми подобными статьями, но ни одна из статей, с которыми я сталкивался, не решает мою проблему.

Ниже приведена ошибка:

Проверка не удалась для одного или нескольких объектов.См. Свойство EntityValidationErrors для более подробной информации.Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: 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;
    }
}

Я получаю ту же ошибку.

1 Ответ

0 голосов
/ 03 марта 2019

Попробуйте перехватить исключение типа DbEntityValidationException, используя блок try / catch для вашего метода API,

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;
    }        
}

Примечание: Убедитесь, что указанный выше метод не даст вам обнаруженный недоступный код и вернет соответствующее сообщение или представление или данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...