ASP.NET Core MVCのWebAPIでURLクエリパラメータを取得する方法

投稿者: | 2017年3月5日

ASP.NET Core MVCのWebAPIでURLクエリパラメータを取得する方法を調査したので備忘録を記載します。

 

下記のサイトが非常に参考になりました。

Required query string parameters in ASP.NET Core MVC

 

ASP.NET Core MVCの記述はASP.NET Web API 2に準拠しているらしいです。その中のAttribute Routingという機能で属性を記述することでRouteマップやアクションを定義してURLクエリパラメータをモデルバインドしてくれるそうです。ただ、ソースのどこをみてもMapHttpAttributeRoutes()が見当たらないのでどこで有効にしてるかが解りません。そもそもAttribute Routingがデフォルトで有効になっているからMapHttpAttributeRoutes()が必要ないのかもしれません、ちょっとここら辺勉強不足です。。。

 

とりあえずテスト用のクラスを作成して試していきましょう。

私はVS Codeで試したのでVS Codeで実施する場合、環境構築についてはこちらを参考にしてください。

URLクエリパラメータをモデルバインドするためには[Route]と[HttpGet]のAttributeをコントローラとメソッドの前に記述します。Routeにはコントローラのパスとして「api/{controller}」設定します。HttpGetには「{id}」と設定します。またメソッドの引数にはURLクエリパラメータと同じ名前の引数を用意します。

 

 

コーディングが完了したら実行してみましょう。下記の4パターンで実行してみてください。私はVS Codeでデバッグ実行したのでURLが「http://localhost:5000/」から開始しています。

  • http://localhost:5000/api/test/5
  • http://localhost:5000/api/test/5?foo=aaa
  • http://localhost:5000/api/test/5?bar=111
  • http://localhost:5000/api/test/5?foo=aaa&bar=111

ブラウザ上にはそれぞれ下記のように出力されると思います。

  • 5
  • 5 aaa
  • 5 111
  • 5 aaa 111

URLから変数にマッピングされて表示されるのが解ると思います。URLのマッピングは下記のような構造になります。

 

 

[FromQuery] Attributeはなくても問題ありませんがマップされるのがURLクエリパラメータである事をコードから推察できるので記載しとくほうがいいです。

これでURLクエリパラメータを取得することが出来るようになると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA