ASP.NET Web API 2 を利用してシンプルなWebAPI アプリケーションを作成する

ASP.NET Web API 2 を利用したWeb API アプリケーションのコードを紹介します。

概要

ASP.NET に追加された Web API 2 機能を利用するとWebAPIを簡単に実装できます。この記事では、ASP.NET Web API 2を利用したシンプルなWebAPIアプリケーションの作成手順とコードを紹介します。

プログラム例:2024年版

プロジェクトの作成

Visual Studio を起動してプロジェクトを作成します。


ASP.NET Web アプリケーション (.NET Framework)を作成します。


[ASP.NET Web アプリケーション (.NET Framework)]を作成すると、下図の [新しい プロジェクトを構成します]のダイアログが表示されます。プロジェクト名とフレームワークを選択し[作成]ボタンをクリックします。


[新しい ASP.NET Web アプリケーション]のダイアログが表示されます。
アプリケーションの種類のリストビューで[空]のアプリケーションの種類を選択します。 また、ウィンドウ下部のオプションは[Web API]PIのチェックボックスをクリックしてチェックを付けます。 設定ができたらダイアログ右下の[作成]ボタンをクリックします。


ASP.NETアプリケーションのプロジェクトが作成されます。

コントローラーの追加

Web APIのロジックを実装するコントローラーをプロジェクトに追加します。ソリューションエクスプローラウィンドウでプロジェクトのノードを開き、[Controllers]フォルダをクリックして選択します。選択後、右クリックしポップアップメニューを表示します。 メニューの[追加]のサブメニューの[新しい項目]をクリックします。


下図の[新しい項目の追加]ダイアログが表示されます。中央のファイルの種類のリストから、 [Web API コントローラークラス (v2.1)]の項目をクリックして選択します。 ダイアログ下部の[名前]のテキストボックスにコントローラー名のファイルを入力します。今回は DefaultController.cs とします。
設定ができたらダイアログ右下の[追加]ボタンをクリックします。


Controllerフォルダ内に、"DefaultController.cs"ファイルが追加されます。

コントローラーのコード

コントローラーは以下のコードが生成されます。
Controllers\DefaultController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace SimpleWebApi.Controllers
{
  public class DefaultController : 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)
    {
    }
  }
}
App_Start\WebApiConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace SimpleWebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API の設定およびサービス

            // Web API ルート
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "ValuesApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

テスト実行

生成されたコードでの実行結果を確認します。

プロジェクトを実行します。Webブラウザが起動し、アプリケーションルートのURLにアクセスしますが、マッピングがないため、エラーメッセージが表示されます。


(ASP.NETアプリケーションルートURL)/api/Default/ をWebブラウザのアドレスバーに入力してアクセスします。
コントローラークラス名が DefaultController で作成しているため、Controllerの手前の Default がコントローラー名になります。
XML形式で、value1, value2 の値が出力されています。


<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <string>value1</string>
  <string>value2</string>
</ArrayOfstring>

コントローラーの実装

コントローラーのレスポンスを変更します。以下のコードに変更します。
DefaultController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace SimpleWebApi.Controllers
{
  public class MyItem
  {
    public int ID { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
  }

  public class DefaultController : ApiController
  {

    public MyItem[] Get()
    {
      MyItem m1 = new MyItem() { ID = 1, Name = "ぺんぎんクッキー", Price = 130 };
      MyItem m2 = new MyItem() { ID = 2, Name = "らくだキャラメル", Price = 85 };
      MyItem m3 = new MyItem() { ID = 3, Name = "かるがもビスケット", Price = 220 };

      return new MyItem[]{ m1,m2,m3};
    }
  }
}

解説

情報を格納するMyItemクラスを定義します。ID,Name,Price の3つのプロパティを持ちます。
  public class MyItem
  {
    public int ID { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
  }

Getメソッドを変更します。MyItemクラスの配列を戻すレスポンスに変更します。
  public MyItem[] Get()
  {
    MyItem m1 = new MyItem() { ID = 1, Name = "ぺんぎんクッキー", Price = 130 };
    MyItem m2 = new MyItem() { ID = 2, Name = "らくだキャラメル", Price = 85 };
    MyItem m3 = new MyItem() { ID = 3, Name = "かるがもビスケット", Price = 220 };

    return new MyItem[]{ m1,m2,m3};
  }

実行結果

プロジェクトを実行し (ASP.NETアプリケーションルートURL)/api/Default/ をWebブラウザのアドレスバーに入力してアクセスします。
下図の結果が表示されます。MyItemオブジェクトの値がXML形式で整形されたレスポンスが返ります。


<ArrayOfMyItem xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/SimpleWebApi.Controllers">
<MyItem>
  <ID>1</ID>
  <Name>ぺんぎんクッキー</Name>
  <Price>130</Price>
</MyItem>
<MyItem>
  <ID>2</ID>
  <Name>らくだキャラメル</Name>
  <Price>85</Price>
</MyItem>
<MyItem>
  <ID>3</ID>
  <Name>かるがもビスケット</Name>
  <Price>220</Price>
</MyItem>
</ArrayOfMyItem>

レスポンスをJSON形式にしたい
レスポンスをXML形式ではなくJSON形式にした場合があります。 JSON形式でのレスポンスにする場合はこちらの記事を参照してください。

プログラム例: 2018年版

プロジェクトの作成

Visual Studio を起動してプロジェクトを作成します。



ASP.NET Web アプリケーションを作成します。


ASP.NET Web アプリケーションを作成すると、下図の[新しい ASP.NET Web アプリケーション]のダイアログが表示されます。


上部のアプリケーションの種類のリストビューで[空]のアプリケーションの種類を選択します。また、ウィンドウ下部のオプションは[Web API]PIのチェックボックスをクリックしてチェックを付けます。設定ができたらダイアログ右下の[OK]ボタンをクリックします。


ASP.NET Web APIのアプリケーションが作成されます。

コントローラーの追加

Web APIのロジックを実装するコントローラーをプロジェクトに追加します。ソリューションエクスプローラウィンドウでプロジェクトのノードを開き、[Controllers]フォルダをクリックして選択します。選択後、右クリックしポップアップメニューを表示します。メニューの[追加]のサブメニューから[コントローラー]をクリックします。


[スキャフォールディングを追加]ダイアログが表示されます。


左側のツリービューの[コントローラー]のノードをクリックして選択します。右側の追加する項目のリストビューの[Web API 2 Controller - Empty] の項目をクリックして選択します。選択後ウィンドウ右下の[追加]ボタンをクリックします。


[Add Controller] ダイアログが表示されます。作成するコントローラーの名称を入力します。今回はデフォルトのままの名称の "DefaultController" とします。設定後[Add]ボタンをクリックします。


コントローラーが作成され、ソリューションエクスプローラーにコントローラーのファイル "DefaultController.cs" が追加されます。

コントローラーの実装

コントローラーのクラスにメソッドを実装して、Web APIを作成します。コントローラーのコードに下記のコードを記述します。
DefaultController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace SimpleWebApi.Controllers
{
  public class DefaultController : ApiController
  {
    public string Get()
    {
      return "Penguin";
    }
  }
}

解説

コントローラーのクラスにメソッドを実装します。Getで取得するWebAPIのため、Getで始まるメソッド名にする必要があります。そのため、メソッド名は、Get() GetItem() GetPenPen() いずれの名称でも構いません。
呼び出されるメソッドはパラメーターの数に応じたものになります。今回実装したGet() メソッドは引数がありませんので、パラメーターが無い場合に呼び出されるメソッドになります。
メソッド内では戻り値として "Penguin" の文字列を返します。この値がWeb APIの戻り値になります。

実行結果

プロジェクトを実行します。Webブラウザが起動し、ASP.NETのアプリケーションルートのURLが開かれます。アプリケーションルートの処理は何も実装していないため、下図の403エラーメッセージが表示されます。


(ASP.NETアプリケーションルートURL)/api/Default/ をWebブラウザのアドレスバーに入力してアクセスします。


Web APIの呼び出しが実行され、戻り値のファイルがダウンロードされます。


ダウンロードしたファイルを開き内容を確認します。


ファイルの内容は下記です。コントローラーに記述した戻り値の値がファイルで出力できていることが確認できます。
"Penguin"


以上でASP.NET Web API 2を利用したシンプルなWebAPIの実装ができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-08-17
改訂日: 2024-08-11
iPentec all rights reserverd.