Jiro Laboratory

C#、ASP.NET、JavaScript、Androidとか

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)
        {
        }
    }
}

試しに実行

デバッグ実行を開始して、ブラウザのアドレスバーに

http://アプリケーションのルートフォルダ/api/values

と入力してEnter。
以下のようにjsonの保存ダイアログが表示されればOK。