В моем приложении пользователь должен зарегистрироваться. Если возможно, электронная почта или имя пользователя уже используется (то есть эти поля уникальны), я возвращаю результат "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;
}