ASP.NET MVCプロジェクトにWeb APIを追加する
前回の内容を踏まえ、既存のMVCプロジェクトにWeb APIの機能を追加する手順を検証しました。
必要最小限の手順は以下でよいと思われます。
NuGet で ASP.NET Web API をインストールする
NuGet Gallery | Microsoft ASP.NET Web API 2.2 5.2.2
ツール → NuGet パッケージ マネージャ → パッケージ マネージャ コンソール
(「既定のプロジェクト」が目的のプロジェクトになっていることを確認して)以下を実行
PM> Install-Package Microsoft.AspNet.WebApi
App_Start フォルダに WebApiConfig.cs を追加
using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace WebApplication1 { public static class WebApiConfig { 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 } ); } } }
Global.asax.cs に WebApiConfig の登録を追加
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; namespace WebApplication1 { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } }
プロジェクトとしては以上で終了。
試しにAPIを追加してみます。
サンプルAPIを追加
Controllersフォルダを右クリック → 追加 → Web API コントローラー クラス
名前を「ValuesController」に設定
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace WebApplication1.Controllers { public class ValuesController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/<controller>/5 public string Get(int id) { return "value"; } // POST api/<controller> public void Post([FromBody]string value) { } // PUT api/<controller>/5 public void Put(int id, [FromBody]string value) { } // DELETE api/<controller>/5 public void Delete(int id) { } } }