【问题标题】:How to get detailed errors from ModelState asp.net web api identity如何从 ModelState asp.net web api 身份获取详细错误
【发布时间】:2016-08-02 16:10:28
【问题描述】:

我有一个带有 asp.net web api 2 身份的注册表单。

这是我的注册函数:

// POST api/Account/Register
    [AllowAnonymous]
    [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);
        }

        try
        {
            ...send email
        }
        catch (Exception ex)
        {
            throw new Exception(ex.ToString());
        }
        return Ok();
    }

如果ModelState 无效,则返回如下内容:

我怎样才能得到这个详细的错误信息? 我正在寻找一种从 ModelState 动态获取所有详细错误的方法。 当我收到响应时,我不确定是否应该在 Web api 或 javascript 中执行此操作。

【问题讨论】:

  • 你的意思是data.modelState["model.Password"][0]的错误吗?
  • 是的,但是每次在不同的地方,我怎样才能动态获取所有详细的错误?
  • @MichaelCoxon 谢谢你,对我帮助很大!

标签: javascript c# asp.net-web-api asp.net-identity-2


【解决方案1】:

我最终在我的 AccountController 上编写了以下函数。 它循环遍历ModelState 上的错误,将它们添加到列表中,然后循环遍历列表并将它们添加到ModelState

public void SetCustomError()
    {
        var errors = new List<string>();
        foreach (var state in ModelState)
        {
            foreach (var error in state.Value.Errors)
            {
                errors.Add(error.ErrorMessage);
            }
        }
        foreach (var error in errors)
        {
            ModelState.AddModelError("CustomError", error);
        }
    }

然后在我的 javascript 上我是这样处理的:

function showError(jqXHR) {
    if (jqXHR) {      
        jsonValue = jQuery.parseJSON(jqXHR.responseText);
        if (!jsonValue.modelState["customError"] == undefined) {
            $("#error").text(jsonValue.modelState["customError"][0]);
        }
        else {
            $("#error").text(jsonValue.modelState[""][0]);
        }
        $("#modalError").dialog();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2012-12-26
    相关资源
    最近更新 更多