在我的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;
}
根据注释,您需要解析该字符串content
,JSON
并假设您API
是以这种方式设计的,则返回一个字符串。
我不确定您的API
代码,但是如果您需要发送ModelState
,则可以使用以下格式以JSON格式发送:
return Json(ModelState);
您不应该使用IsSuccessStatusCode
一种检查逻辑的方法。基本上,它是一个指示HTTP响应是否成功的值。这是true
如果HttpStatusCode是在成功范围(200-299); 否则false
。的算法IsSuccessStatusCode
如下所示:
public bool IsSuccessStatusCode
{
get { return ((int)statusCode >= 200) && ((int)statusCode <= 299); }
}
您可以清楚地看到上述功能仅取决于statusCode
从API接收到的信息。
因此,您需要根据content
从API收到的来定义逻辑。创建一个模型,该模型将根据您在API中定义的条件保存来自API的响应。
HttpResponseMessage responsePost = GlobalVariables.WebApiClient.PostAsJsonAsync("Account/Register", registerBindingModel).Result;
MyAPIResponse model=new MyAPIResponse();
string content=string.Empty;
if (responsePost.IsSuccessStatusCode)
{
content = response.Content.ReadAsStringAsync().Result;
model = JsonConvert.DeserializeObject<MyAPIResponse>(content);
//or if you do not want a model structure for the parsing
//var parsedmodel = JsonConvert.DeserializeObject<dynamic>(content);
}
ViewBag.Message=model.message;
我无法解析您评论中发布的内容,因为它不是有效的JSON
字符串。您将需要JSON
为逻辑生成正确的格式。
编辑:
因此,您可以ModelState
使用扩展方法将错误作为JSON发送:
public static class ModelStateHelper
{
public static IEnumerable Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key,
kvp => kvp.Value.Errors
.Select(e => e.ErrorMessage).ToArray())
.Where(m => m.Value.Any());
}
return null;
}
}
然后从Controller
动作中调用该扩展方法:
if (!ModelState.IsValid)
{
return Json(new { Errors = ModelState.Errors() }, JsonRequestBehavior.AllowGet);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句