VS2015 (sdk 1.0.0-preview2-003131) で ASP.NET Core 1.1 を使用すると、次のコントローラーが作成されます。
public class QueryParameters
{
public int A { get; set; }
public int B { get; set; }
}
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get([FromQuery]QueryParameters parameters)
{
return new [] { parameters.A.ToString(), parameters.B.ToString() };
}
}
ご覧のとおり、クエリ パラメータが 2 つあります。そのうちの 1 つ (例: A
) を必須にしたいのです。つまり、属性 (可能であれば) を使用して、この属性が必須であることを示します。次に、コントローラーを呼び出す前に ASP.NET でこの検証を実行するようにします。
私はニュートンソフトを使いたかった必須属性PUT/POST コンテンツ内の必須プロパティを検証するために既に使用しているのと同じ属性を使用しますが、URL は JSON 文字列ではないため、明らかに使用されません。
ASP.NET Core で必要なクエリ パラメータを自動的にチェックするための提案はありますか?
なお、null 許容クエリ パラメータを使用して自分でチェックをコーディングすることはできますが、それではコントローラーを呼び出す前に ASP.NET に検証を行わせてコントローラーを整理するという目的に反します。
ベストアンサー1
ASP.NET Core 2.1以降では、トップレベルのパラメータ検証を使用できます。パラメータに属性を追加できます。
[HttpGet]
public IActionResult GetDices([BindRequired, Range(1, 6)]int number)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid number");
}
return Ok(_diceRepo.GetDices(number));
}
これについてさらに詳しくhttps://programmingcsharp.com/asp-net-parameter-validation/#トップレベルノード検証