こんにちは。「たまり醬油に冷奴」ことやっこです。
今回は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¶2=hoge)やパスパラメータ(~/api/hoge/{para1}/{para2})についても気になりますし
階層の深いURL(~/api/hoge1/hoge2/hoge3/hoge4/hoge5)を指定したい場合などにどうすればよいのかが気になります。
今後、調査してみてまとめようかと思います。
ここまで読んでいただきありがとうございます。