【发布时间】:2020-05-10 09:45:13
【问题描述】:
在我的 IdentityConfig.cs 中
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
在我的 Web MVC UI 中,这是我的操作方法
HttpResponseMessage responsePost = GlobalVariables.WebApiClient.PostAsJsonAsync("Account/Register", registerBindingModel).Result;
if (responsePost.IsSuccessStatusCode)
{
ViewBag.Message = "Added";
}
else
{
ViewBag.Message = "Internal server Error: " + responsePost.ReasonPhrase;
}
代码有效。如果它通过密码验证逻辑,我可以发布数据。但如果它失败了,它只会将Internal server Error: Bad Request 退回到我的用户界面。但是当我使用 Postman 对其进行测试时,我可以看到来自身份的错误消息。示例Passwords must have at least one lowercase ('a'-'z').
这个错误信息存储在HttpResponseMessage哪里?
注册API方法
[AllowAnonymous]
[HttpPost]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
private 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);
}
}
if (ModelState.IsValid)
{
// No ModelState errors are available to send, so just return an empty BadRequest.
return BadRequest();
}
return BadRequest(ModelState);
}
return null;
}
【问题讨论】:
-
HttpResponseMessage 类具有内容属性。您需要读取该属性的值。 stackoverflow.com/questions/29975001/…
-
@ChetanRanpariya 现在我可以使用
var content = responsePost.Content.ReadAsStringAsync(); ViewBag.Message = "Error: " + content.Result;读取错误,但它的输出是Error: {"$id":"1","Message":"The request is invalid.","ModelState":{"$id":"2","":["Passwords must have at least one lowercase ('a'-'z')."]}}。如何只阅读ModelState错误消息?
标签: c# asp.net-mvc api asp.net-identity