Как перебрать или вернуть InvalidModelStateResult пользователю - PullRequest
0 голосов
/ 08 ноября 2019

В моем приложении пользователь должен зарегистрироваться. Если возможно, электронная почта или имя пользователя уже используется (то есть эти поля уникальны), я возвращаю результат "InvalidModelStateResult"

, теперь это будет возвращать error.modelState в виде массива. Но поля имеют название "". Так что практически невозможно получить доступ к массиву.

Я попытался пройтись по модели в машинописи. Но я никогда не смогу пройти мимо попытки получить доступ к имени "".

Документация microsofts абсолютно бесполезна.

Что-то, что я не пробовал, это просто вернуть строку на стороне сервера, ноЯ не хочу просто делать поспешные выводы.

 if (!isNullOrUndefined(error.error.modelState)) {
          var er = "";
          let x = error.error.modelState;
          for (var i = 0; i<error.error.modelState.length;i++) {
            er += error.error.modelState[i];
          }
          console.log(er);}

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

Я также знаю, что для безопасности может быть не лучшим образом показать, почему они не могут зарегистрироваться, потому что тогда злоумышленник будет знать, какие электронные письма используются. настолько актуально и что я смог успешно сделать, это сказать, если (! isNullOrUndefined (error.error.modelState)) затем вернуть строку «Email или Имя пользователя уже используется».

Любая помощь будет оченьприветствуется.

Редактировать: некоторый код на стороне сервера.

IdentityResult result = await this.AppUserManager.CreateAsync(um, password);

                Uri locationHeader = null;
                IHttpActionResult errorResult = GetErrorResult(result);

                if (errorResult != null)
                {
                    return errorResult;
                }

protected IHttpActionResult GetErrorResult(IdentityResult result)
        {
            if (result == null)
            {
                return InternalServerError();
            }

            if (!result.Succeeded)
            {
                if (result.Errors != null)
                {
                    foreach (string error in result.Errors)
                    {
                        ModelState.AddModelError("", error);//There is no //easy way to set a property name here so I went with "" well that explains one mystery but after exploring trying to set a property name .there is nothing in result.Errors to aide in that.
                    }
                }

                if (ModelState.IsValid)
                {
                    // No ModelState errors are available to send, so just return an empty BadRequest.
                    return BadRequest();
                }

                return BadRequest(ModelState);
            }

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