以前、Owinを取り上げたことがありました。今回はこのOwinのエッセンス的な要素Self-HostでWebAPI2を利用したAPIサーバをチュートリアルにそって、作成してみます。
Self-Hostとは
IIS抜きにプロジェクト単体でホストできることをさすようです。
プロジェクトの作成
コンソールアプリケーションのプロジェクトを作成します。
OwinライブラリをNuGetからインストールします。
パッケージマネージャーコンソールで次のコマンドを実行します。
PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Owin Configurationを作成する
プロジェクトに新しくStartup.cs
ファイルを追加し、次のように編集します。
[csharp] using Owin; using System.Web.Http; // namespace SelfHostSample { public class Startup { public void Configuration(IAppBuilder appBuilder) { HttpConfiguration config = new HttpConfiguration(); // config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // appBuilder.UseWebApi(config); } } } [/csharp]
ASP.NETでもよく見かけるルーティング設定です。
コントローラの作成
プロジェクトに新しくValuesController.cs
ファイルを追加し、次のように編集します。
[csharp] using System.Collections.Generic; using System.Web.Http; // namespace SelfHostSample { 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) { } } } [/csharp]
これも、ASP.NETでおなじみのApiControllerです。
アクセス
Program.Main
メソッド内でWebApp
を開始し、動作チェックをします。
[csharp] using Microsoft.Owin.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; // namespace SelfHostSample { class Program { static void Main(string[] args) { string baseAddress = "http://localhost:9000/"; // using (WebApp.Start<Startup>(url: baseAddress)) { HttpClient client = new HttpClient(); // var response = client.GetAsync(baseAddress + "api/values").Result; // Console.WriteLine(response); Console.WriteLine(response.Content.ReadAsStringAsync().Result); } Console.ReadLine(); } } } [/csharp]
9000番ポートに起動します。WebApp.Start
メソッドでサーバーを開始し、client:HttpClient
でlocalhost:9000/api/values
に対してGET
メソッドでアクセスしレスポンスを表示します。
返ってきたレスポンスがこちら
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Date: Tue, 25 Mar 2014 15: 12:09 GMT
Server: Microsoft-HTTPAPI/2.0
Content-Length: 19
Content-Type: application/json; charset=utf-8
}
["value1", "value2]