2016-08-02 27 views
0

我有一個與asp.net web api 2身份的註冊表格。如何從模型狀態asp.net web api身份得到詳細的錯誤

這是我的註冊功能:

// 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沒有的Valide返回是這樣的:

enter image description here

我怎樣才能得到這個詳細的錯誤? 我正在尋找一種方式來從ModelState動態獲取所有詳細的錯誤。 我不確定我是否應該在Web API或JavaScript中執行此操作,當我收到響應時。

+1

你的意思是在'data.modelState [ 「model.Password」]錯誤[0]'? –

+0

是的,但每次它在不同的地方,我如何動態獲取所有詳細的錯誤? – user3378165

+0

@MichaelCoxon謝謝你,它幫了我很多! – user3378165

回答

0

我結束了在我的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(); 
    } 
}