私はテストを試みて同じ結果を得るためにfiddlerとswaggerを使用しました。ここでaspnet 5 RESTful API ModelState.IsValid == DataAnnotationsで値が無効であってもtrueです。
はモデルです:
using System.ComponentModel.DataAnnotations;
namespace AdGeo.Configuration.WebApi.Model
{
public class ValueAdd
{
public string test { get; set; }
[Required(ErrorMessage = "Range is required")]
[Range(0,9,ErrorMessage ="Range 0 to 9")]
[Display(Name ="Test Required")]
public int? testrequired { get; set; }
}
}
ここでコントローラです:
using Microsoft.AspNet.Mvc;
using AdGeo.Configuration.WebApi.Model;
// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
namespace AdGeo.Configuration.WebApi.Controllers
{
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public IActionResult Post([FromBody]ValueAdd valueAdd)
{
if(ModelState.IsValid)
{
return new CreatedAtActionResult("Get", "Values", new { id = 5 }, valueAdd);
}
return new BadRequestObjectResult(ModelState);
}
}
}
サンプルJSON:
{
"test": "string",
"testrequired": 100
}
それは本当等しいModelState.IsValidになり、私は100が範囲外であるため、それが偽と等しくなることを期待しています。私は、このJSONを投稿しようとした場合
はまた、: サンプルJSON:
{
"test": "string"
}
を私はModelState.IsValidが偽であることを期待する、しかしそれは本当等しいです。
アクションフィルタを作成しようとしている人は、私が見ているところはほとんどありませんが、MVC6の前のソリューションと同じではありません。
私は何が不足していますか、これはStackExchangeの最初の投稿であることに注意してください。明確化が必要なことを私に教えてください。私はそれに応じて編集します。
ありがとうございました!
モデルの状態のエラーを確認しましたか? 'var errors = ModelState.Where(e => e.Value.Errors.Count> 0).ToList();'で取得できます。 –
質問していただきありがとうございます。問題は、ModelStateにエラーがないとは思わないことです。私があなたが求めているものを誤って解釈していない限り、ModelState.IsValidの戻り値は真実です。ちょうど私があなたが提案したものを実行しようとしましたが、ModelStateのメソッドはどこにありませんでした。 –
ハァッ、そうですよ!私はあなたの質問を誤解しました。私が現時点で持っている唯一の提案は、HttpPostメソッドにブレークポイントを設定し、 'valueAdd'の値をピークにして、期待通りのものかどうかを確認することです。 –