このチュートリアルでは、OWIN を使用して Web API フレームワークをセルフホストし、コンソール アプリケーションで ASP.NET Web API をホストする方法について説明します。
Open Web Interface for .NET (OWIN) は、.NET Web サーバーと Web アプリケーションの間の抽象化を定義します。 OWIN はサーバーから Web アプリケーションを切り離します。そのため、OWIN は IIS 外部の独自のプロセスで Web アプリケーションをセルフホストするのに最適です。
チュートリアルで使用するソフトウェアのバージョン
- Visual Studio 2017
- Web API 5.2.7
Note
このチュートリアルの完全なソース コードが github.com/aspnet/samples にあります。
コンソール アプリケーションを作成する
[ファイル] メニューの [新規作成] で、[プロジェクト] を選択します。 [インストール済み] から、[Visual C#] で [Windows デスクトップ] を選択し、[コンソール アプリ (.Net Framework)] を選択します。 プロジェクトに "OwinSelfhostSample" という名前を付け、[OK] を選択します。
Web API と OWIN パッケージを追加する
[ツール] メニューで、[NuGet パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
これにより、WebAPI OWIN セルフホスト パッケージと必要なすべての OWIN パッケージがインストールされます。
セルフホスト用に Web API を構成する
ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] / [クラス] を選択して新しいクラスを追加します。 クラスに Startup
という名前を付けます。
このファイル内のすべての定型コードを次のように置き換えます。
using Owin;
using System.Web.Http;
namespace OwinSelfhostSample
{
public class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
}
Web API コントローラーを追加する
次に、Web API コントローラー クラスを追加します。 ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] / [クラス] を選択して新しいクラスを追加します。 クラスに ValuesController
という名前を付けます。
このファイル内のすべての定型コードを次のように置き換えます。
using System.Collections.Generic;
using System.Web.Http;
namespace OwinSelfhostSample
{
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";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
}
OWIN ホストを起動し、HttpClient を使用して要求を行う
Program.cs ファイル内のすべての定型コードを次のように置き換えます。
using Microsoft.Owin.Hosting;
using System;
using System.Net.Http;
namespace OwinSelfhostSample
{
public class Program
{
static void Main()
{
string baseAddress = "http://localhost:9000/";
// Start OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
{
// Create HttpClient and make a request to api/values
HttpClient client = new HttpClient();
var response = client.GetAsync(baseAddress + "api/values").Result;
Console.WriteLine(response);
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
Console.ReadLine();
}
}
}
}
アプリケーションの実行
アプリケーションを実行するには、Visual Studio で F5 キーを押します。 出力は次のようになります。
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Date: Tue, 09 Jul 2013 18:10:15 GMT
Server: Microsoft-HTTPAPI/2.0
Content-Length: 19
Content-Type: application/json; charset=utf-8
}
["value1","value2"]