ASP.NET Web API における、ルーティング についてまとめます。 WCF と似ているけれど、バインド方法が若干異なるので、注意が必要そうです。
目次
参考までに…以下はルーティングに関連する別記事へのリンクです。
デフォルト設定 (デフォルト の ルーティング)
Web API も クライアント から サーバー に アクセス があると、ルートテーブル に設定された情報に従って実行する クラス 、関数 が選択されます。 この ルートテーブル への設定は、App_Start フォルダ 配下にある WebApiConfig.cs ファイル に記述されます。
// App_Start / WebApiConfig.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi" , routeTemplate: "api/{controller}/{id}" , defaults: new { id = RouteParameter.Optional } ); } } |
デフォルト の ルーティング は api/{controller}/{id}
なので、デフォルト の 呼び出し方 と 呼び出され方 の例は次のようになります。
クライアントからのリクエスト | サーバーで実行される関数 | ||||
---|---|---|---|---|---|
メソッド | URI | コントローラー | アクション | 引数 | |
例1 | GET | http://[サーバー名]/[アプリケーション名]/api/xxxx | XxxxController クラス | Get メソッド | 引数なし |
例2 | GET | http://[サーバー名]/[アプリケーション名]/api/xxxx/5 | XxxxController クラス | Get メソッド | 5 |
例3 | POST | http://[サーバー名]/[アプリケーション名]/api/xxxx/5 | XxxxController クラス | Post メソッド | 5 |
つまり、デフォルト設定では以下のような挙動になります。
- リクエスト時 の大文字小文字は区別されない
- 実行する コントローラー の アクション (メソッド) は、 リクエスト時 の メソッド名 で自動的に選択される
ルーティングテーブル追加による変更
App_Start フォルダ 配下にある WebApiConfig.cs ファイル に追記することで、新しい ルーティング を設定する方法です。 以下の サンプルコード では、WCF と同じように アクション を指定させる ルーティング を追加しています。
// App_Start / WebApiConfig.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi" , routeTemplate: "api/{controller}/{id}" , defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "ControllerActionApi" , routeTemplate: "api/{controller}/{action}/{id}" , defaults: new { id = RouteParameter.Optional } ); } } |
カスタム属性による変更
メソッド毎に属性(HttpGet
、HttpPost
、HttpPut
、HttpDelete
等)が存在するので、必要な メソッド に対応する属性を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | namespace MvcApplication5.Controllers { using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; public class XxxxController : ApiController { [HttpPost] public HttpResponseMessage CreateNewProduct([FromBody] product) { // POST で呼び出される } } } |
今回、以下のサイトを参考にしました。
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!