OWIN を使ったセルフホストで ASP.NET Web API 2 をかんたん起動
追記
自分でコンソールアプリを作らなくても、NuGet から OwinHost をインスト すれば、プロジェクトフォルダ内に OwinHost.exe が追加されるので、それを使う方法もあります。Katana で Hello, world
===
Web API を利用したストアアプリを作成&デバッグしているときに、いちいち Visual Studio で ASP.NET Web API を起動するのが面倒だったので、セルフホストを使って exe で実行できるようにしました。
トレース機能を有効にすると、Web API の呼び出しに合わせて内部の様子が確認できるので便利です。
セルフホスト自体は ASP.NET Web API 登場時からできましたが、ASP.NET Web API 2 が OWIN にフル対応したので、今はもう OWIN でホストすることで、セルフホストが可能になります。
ソリューション構成↓
ASP.NET Web API 2 のプロジェクト「TaroWebApi」と、コンソールアプリケーションのプロジェクト「SelfHostConsole」の 2 つを用意しています。
以下、Visual Studio 2013 RC を使った手順を書いていきます。
参考サイト
(今回の OWIN を使ったセルフホストは、ASP.NET Web API のバージョン 1 では利用できません。バージョン 1 でセルフホストする場合は Self-Host a Web API (C#) を参照)
ASP.NET Web API 2 のプロジェクトを用意
既に作成してある場合は必要ないですが、ここでは簡単な Web API を用意するために一から作成します。
Visual Studio 2013 で、ファイル>新規作成>プロジェクト>ASP.NET Web アプリケーション を選択。
選択後は、シンプルな Web API プロジェクトを作成するために、下のように設定します。
プロジェクト作成後、ApiController を用意します。
「Controllers」フォルダを右クリック>追加>スキャフォールディングビュー>読み取り/書き込みアクションがある Web API 2 コントローラ を選択します。
コントローラー名は、「ValuesController」としました。
トレース機能の利用
NuGet より、トレース機能をインストールします。(パッケージ名:Microsoft.AspNet.WebApi.Tracing)
パッケージマネージャーコンソールにて、以下のコマンドを打ちます。
Install-Package Microsoft.AspNet.WebApi.Tracing
インストール後、「App_Start」フォルダ内の WebApiConfig.cs にコードを追加します。
using System.Web.Http; namespace TaroWebApi { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services config.EnableSystemDiagnosticsTracing(); //←追加 // Web API routes config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } }
コンソールアプリのプロジェクトを用意
ソリューションに、コンソールアプリのプロジェクトを追加します。
ソリューションエクスプローラで、ソリューションを右クリック>追加>新しいプロジェクト>コンソールアプリケーション を選択します。
プロジェクト作成後、先ほど作成した Web API プロジェクトの参照を追加します。(ValuesController.cs と WebApiConfig.cs を参照するためです)
コンソールアプリのプロジェクトの参照設定を右クリック>参照の追加 で、Web API プロジェクトを選択します。
NuGet より、Microsoft.AspNet.WebApi.OwinSelfHost をインストールします。
パッケージマネージャーコンソールにて、以下のコマンドを打ちます。
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
※インストール先のプロジェクトは、コンソールアプリのプロジェクトにします。
(パッケージマネージャコンソールウィンドウの、「規定のプロジェクト」にコンソールアプリのプロジェクトが選択されていることを確認します。)
コンソールアプリのプロジェクトに、Startup.cs を新たに追加し、下の Configuration メソッドを追加します。
using Owin; using System.Web.Http; namespace SelfHostConsole { public class Startup { public void Configuration(IAppBuilder appBuilder) { var config = new HttpConfiguration(); TaroWebApi.WebApiConfig.Register(config); appBuilder.UseWebApi(config); } } }
(ここの”TaroWebApi”というのは、Web API プロジェクトの名前空間になります。)
Program.cs の Main メソッドに下のようにコードを追加します。
using Microsoft.Owin.Hosting; using System; namespace SelfHostConsole { class Program { static IDisposable _app; static void Main(string[] args) { string baseAddress = "http://localhost:9000/"; _app = WebApp.Start<Startup>(url: baseAddress); Console.WriteLine("start:{0}", baseAddress); Console.ReadKey(); } } }
以上で、プロジェクトの準備は終わりです。
コンソールアプリを実行し、ブラウザ等で「http://localhost:9000/api/values」にアクセスすると、レスポンスが返ってきます。
後は、任意のタイミングで bin フォルダ内にある exe ファイルを実行し、Web API を呼び出すことができます。