Как добавить имена переменных в возвращаемые значения ModelState.isvalid в случае возникновения ошибки? - PullRequest
0 голосов
/ 04 января 2019

Так что я использую Modelstate.isvalid, но когда я получаю сообщение об ошибке, он показывает сообщения об ошибках, но не с какой переменной они связаны. здесь возвращается состояние модели в случае ошибки.

[
[
    {
        "exception": null,
        "errorMessage": "Geen geldige email."
    }
],
[
    {
        "exception": null,
        "errorMessage": "Wachtwoord moet op z'n minst 8 en maximaal 40 tekens hebben, moet op z'n minst 1 hoofdletter en 1 cijfer in."
    }
]

]

не обращайте внимания на голландца, это просто сообщение об ошибке, но, как вы видите, оно показывает только сообщение об ошибке, но не переменную, к которой оно относится, поэтому первая будет переменной «email», а вторая это "Пароль".

Вот код, который я использую, посмотрите внизу для моделиstate.isvalid

//Post api/Accounts/Register
    [HttpPost("Register")]
    public IActionResult Register([FromBody]User u, string name, string lastname, string birthday, string password, string gender, string streetname, string email, string housenumber, string addition, string postalcode, string city, string phonenumber)
    {
        var UserData = from user in _context.users
                       where (name == u.Name &&
                       lastname == u.LastName &&
                       birthday == u.Birthday &&
                       password == u.Password &&
                       gender == u.Gender &&
                       streetname == u.Street_Name &&
                       email == u.email &&
                       housenumber == u.House_Number &&
                       addition == u.Addition &&
                       postalcode == u.Postalcode &&
                       city == u.City &&
                       phonenumber == u.Telephone_Number)
                       select u;

        if (u.Name == null || u.LastName == null || u.Birthday == null || u.Password == null || u.Gender == null || u.Street_Name == null || u.email == null || u.House_Number == null || u.Addition == null || u.Postalcode == null || u.City == null || u.Telephone_Number == null)
        {
            return BadRequest("A.U.B Alle velden invullen");
        }

        //Check for potential errors
        bool DupeMail = _context.users.Any(Dupe => Dupe.email == u.email);
        bool PhoneCheck = _context.users.Any(CheckPhone => CheckPhone.Telephone_Number == u.Telephone_Number);


        //Criteria check
        if (DupeMail)
        {
            return BadRequest("Email bestaat niet of is al in gebruik");
        }
        if (PhoneCheck)
        {
            return BadRequest("Telefoon nummer bestaat niet of is al in gebruik");
        }
        if (DupeMail == false && PhoneCheck == false)
        {
           if(ModelState.IsValid)
                    {
                        _context.users.Add(u);
                        _context.SaveChanges();
                        return Ok("Account Created");
                    } else {
                                var errors = ModelState.Select(x => x.Value.Errors)
                                    .Where(y=>y.Count>0)
                                    .ToList();
                                    return BadRequest(errors);
                            }
        }
        else
        {
            return NoContent();
        }
    }

Итак, мне бы хотелось, чтобы в каждом сообщении об ошибке также отображалось имя переменной.

Любая помощь будет принята с благодарностью! :)

EDIT Так что, если я сделаю это

return BadRequest(ModelState);

это дает мне это

{
"Postalcode": [
    "Dit is geen geldige postcode, voer een geldige postcode in AUB."
],
"Telephone_Number": [
    "Dit is geen geldig normaal Nederlands telefoon nummer, voer een geldig telefoon nummer in."
]

} но мой коллега хочет, чтобы он выглядел так, как данные JSON, показанные перед редактированием. Проблема в моем запросе, который я написал, мне нужно выбрать Value.Errors и x.Key, но я понятия не имею, как это сделать. Надеюсь, это еще одна полезная информация.

...