2016-08-02 4 views
0

私はasp.net web api 2 identityを持つ登録フォームを持っています。ModelStateから詳細なエラーを取得する方法asp.net web api identity

これは私のレジスタ機能である:

// 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がそれをヴァリデされていない場合は、このようなものを返す:

enter image description here

をどのように私はこの詳細なエラーを得ることができますか? 私は、ModelStateからすべての詳細なエラーを動的に取得する方法を探しています。 レスポンスを受け取ったときに、Web APIやJavaScriptでそれを行うべきかどうかは分かりません。

+1

あなたは '[0]' data.modelState [ "model.Password"]でエラーを意味していますか? –

+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(); 
    } 
} 
関連する問題