Visual Studio 14 CTP がリリースされたので、ASP.NET vNext で Web API を試してみました。
MVC と Web API が MVC 6 にマージされたので、Areas を利用して Web API のコントローラーをルーティングしてみます。GET のリクエストで、Person オブジェクトの JSON データを返すサンプルを作ります。
- GET api/person/
- GET api/staff/person/
以下のサイトを参考にしました。
MVC の依存関係を追加する
Visual Studio で新規プロジェクトを「ASP.NET vNext Empty Web Application」で作成します。project.json ファイルに、MVC の参照を追加します。インテリセンスが効くので、簡単に記述できます。
#project.json { "dependencies": { "Helios" : "0.1-alpha-build-0585", "Microsoft.AspNet.Mvc": "0.1-alpha-build-1268" }, "configurations" : { "net45" : { }, "k10" : { } } }
URL のルーティングを実装する
Startup クラスの Configure メソッドに、デフォルトと Area の 2 つの URL のルーティングを実装します。
#Startup.cs using System; using Microsoft.AspNet.Builder; using Microsoft.Framework.DependencyInjection; using Microsoft.AspNet.Routing; namespace WebApplication5 { public class Startup { public void Configure(IBuilder app) { app.UseServices(services => { services.AddMvc(); }); app.UseMvc(routes => { routes.MapRoute("AreasApiRoute", "api/{area}/{controller}/{id?}"); routes.MapRoute("ApiRoute", "api/{controller}/{id?}"); }); } } }
モデルを実装する
Web API のレスポンスで返す Person クラスを実装します。
#Person.cs using System; namespace WebApplication5 { public class Person { public int ID { get; set; } public string Name { get; set; } } }
コントローラーを実装する
異なる名前空間の PersonController クラスを実装します。2 つめのコントローラークラスに、[Area("Staff")] の属性を指定するところがポイントです。
#PersonController .cs using Microsoft.AspNet.Mvc; namespace WebApplication5.Controllers { public class PersonController : Controller { public ActionResult Get() { var person = new Person { ID = 16, Name = "Aaron Ramsey" }; return Json(person); } } } namespace WebApplication5.Staff.Controllers { [Area("Staff")] public class PersonController : Controller { public ActionResult Get() { var person = new Person { ID = 99, Name = "Arsène Wenger" }; return Json(person); } } }
実行結果を確認すると、GET api/person/ は「Aaron Ramsey」、GET api/staff/person/ は「Arsène Wenger」のレスポンスが JSON で返ります。
まとめ
以前の記事に投稿したように、Attribute Routing を使っても、異なる名前空間の同名のコントローラーを定義できませんでした。MVCではできるのに・・・
今回、MVC と Web API がマージされたことで、MVC の Areas が使えるようになり、シンプルに実装できます。ASP.NET vNext は、もっと大きな話であり、これ以外にもいろいろと進化があって面白そうなので、少しずつ勉強していきたいと思います。