2017-12-09 6 views
1

.netコア2.xプロジェクトで動作しています。 私のモデルステートを検証するために、以下のコードを各アクションに記述します。.net coreコントローラ/アクションでModelStateを繰り返さないようにしてください。

 if (ModelState.IsValid) 
     { 
      // Do something 
     } 
     else 
     { 
      // Return Modelstate Error 
     } 

各アクションで条件を繰り返さないようにするためのベストプラクティスを知りたいと思います。 アクションに到達する前にmodelstateを検証し、modelstateが有効でない場合は適切なエラーメッセージを返します。

更新

注意。私のアクションは単純なAPIアクションであり、私はちょうどHttpContext Body内のエラー(私のモデルにある)を文字列の配列の形で返そうとしています。

例:モデルプロパティ。

[Required(ErrorMessage = "Fill the name Please !!!")] 
    public string FirstName { get; set; } 

アクションの例この

public class ModelStateValidationFilter : ActionFilterAttribute 
    { 
     public string ErrorPage; 

     public override void OnActionExecuting(ActionExecutingContext context) 
     { 


if (!context.ModelState.IsValid) 
     { 
      //return error result 
      List<string> list = (from modelState in context.ModelState.Values from error in modelState.Errors select error.ErrorMessage).ToList(); 
      context.Result = new BadRequestObjectResult(list); 

      //or redirect to some result 
      context.Result = new RedirectToRouteResult(ErrorPage); 

      //or do whatever you need 
     } 

     base.OnActionExecuting(context); 
    } 
} 

よう

[HttpPost] 
    public void Create([FromBody]MyModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Do something 
     } 
     else 
     { 
      // Return Modelstate Error 
     } 
    } 
+0

これをチェックしてくださいhttps://www.jerriepelser.com/blog/validation-response-aspnet-core-webapi/ –

答えて

1

するTry somethinkとコントローラ上でこの

のようにそれを追加し、アクションに

[ModelStateValidationFilter(ErrorPage = "somepage")] 
    public class SomeController : Controller 

[ModelStateValidationFilter(ErrorPage = "somepage")] 
public IActionResult SomeAction(somemodel model) 

またはスタートアップ経由ですべてに追加

+0

ご回答ありがとうございます。私のアクションは単純なApiであり、IActionResultは存在せず、私は自分のHttpContextにエラーの配列(私のモデルに記述されている)を返すだけです。私はエラーページを返すしたくない。 –

+0

@Arashbahreiniあなたはapiの例が必要ですか?またはこの例で十分でしょうか? – itikhomi

+0

ありがとうございます。それは私のために働いた;) –

関連する問題