[ASP.NET]WebAPI ルーティング設定[C#]

ASP.NET

こんにちは。「たまり醬油に冷奴」ことやっこです。

今回はASP.NETを使用したWebAPIのルーティング設定について調べた内容をまとめたいと思います。

API仕様書がコントローラー名だけでメソッドなしだったり、同じメソッド名で引数違いだったりで、これどうするかな~?となったため適当に調査しました。

環境

  • Visual Studio 2022
  • ASP.NET 4.8.1
  • ASP.NET Web アプリケーション(C#)

ルーティング設定の基本

ASP.NET Web アプリケーション(C#)にあるテンプレート WebAPIでプロジェクトを作成するとWebAPIに必要なファイルが自動で作成されるので、そのファイルについて説明します。

基本的にルーティングの設定は「WebApiConfig.cs」と「各Controller」にて行います。

下記は新規作成時の「WebApiConfig.cs」と「ValuesController.cs」のコードを一部抜粋しています。

WebApiConfig.cs

 public static void Register(HttpConfiguration config)
        {
            // Web API の設定およびサービス

            // Web API ルート
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

ここで重要なのは10~11行目の”routeTemplate”、”defaults”になります。

“routeTemplate”の設定で「ValuesController.cs」のAPIを呼び出したい場合は、HTTPリクエストにhttps:localhost:{ポート番号}/api/valueとすれば呼び出せます。

“defaults”はリクエストURLに含まれていない場合のデフォルトで設定する値になります。
上記設定の”id = RouteParameter.Optional”では{id}に値が入っていない場合は省略するとなっています。

“id = 5″などにすれば”~/api/value”というリクエストURLをルーティングにて”~/api/value/5″として認識されるようになります。

ValuesController.cs

public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody] string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }

メソッド名に”Get”や”Post”などが記載されていますが、この部分がHTTPメソッドの”GET”や”POST”に紐づいています。(仮にメソッド名を”Hoge”などに変更すると認識しなくなります。”GetHoge”などは認識できるようです。)

他にも認識させる方法があります。

        [HttpGet]
        public IEnumerable<string> Hoge()
        {
            return new string[] { "value1", "value2" };
        }

1行目の”[HttpGet]”を指定することでGETのリクエストに対して”Hoge”メソッドを使用することができます。

まとめ

基本的な設定は以上になります。

個人的にはクエリパラメータ(~/api/hoge?para1=10&para2=hoge)やパスパラメータ(~/api/hoge/{para1}/{para2})についても気になりますし

階層の深いURL(~/api/hoge1/hoge2/hoge3/hoge4/hoge5)を指定したい場合などにどうすればよいのかが気になります。

今後、調査してみてまとめようかと思います。

ここまで読んでいただきありがとうございます。