normalian blog

I will introduce about Microsoft Azure, ASP.NET or Java EE

ASP.NET MVC4 の Web API を学んでみる その1 〜基礎編〜

既に RC版 がリリースされている ASP.NET MVC4 の Web API を利用してみたのでメモを記載する。既に日本語でも Web API の紹介記事が書かれているので、まずは以下の記事を参照頂きたい。

今回はプロジェクトテンプレートから生成した Web API アプリケーションの動作概要について確認する。

基本的な使い方について

Global.asax では routes.MapHttpRoute() メソッドを利用し、Web API コントローラのルーティングを設定している。

  • Global.asax(の抜粋)
    public class WebApiApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            //Web API コントローラ用のルーティング
            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            //従来のコントローラ用のルーティング
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

従来のコントローラと異なり、Web API 用のコントローラは ApiController を継承している点に注意が必要だ*1

  • ValuesController.cs(の抜粋)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using System.Diagnostics;

namespace Mvc4WebApiApp.Controllers
{
    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";
        }
    (中略)
}

テンプレート アプリケーションの起動

Visual Studio から アプリケーションを起動し、ブラウザから http://localhost:<ポート>/api/Values にアクセスすることで ValuesController.Get() メソッドの返り値を取得できる。動作イメージについては以下を参照して欲しい。

*1:従来のコントローラは Controller を継承