ごった煮

色々な事を書いてます

Owin Self-Host でWeb API 2を使ってみる

以前、Owinを取り上げたことがありました。今回はこのOwinのエッセンス的な要素Self-HostでWebAPI2を利用したAPIサーバをチュートリアルにそって、作成してみます。

Self-Hostとは

IIS抜きにプロジェクト単体でホストできることをさすようです。

プロジェクトの作成

コンソールアプリケーションのプロジェクトを作成します。

createproject

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:HttpClientlocalhost: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]

IISなしにAPIサーバーができました!