プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2017/05/16

ASP.NET Core でテンプレートサイトを表示するまで

event_note

私は ASP.NET も .NET Core も触ったことありませんが、興味があったので試してみました。

環境

  • Visual Studio 2017 Community

プロジェクトの作成

[ファイル] > [新規作成] > [プロジェクト] より新しいプロジェクトを作成します。

[インストール済み] > [テンプレート] > [Visual C#] > [Web] > [ASP.NET Core Web アプリケーション (.NET Core)] を選択します。

[Web アプリケーション] を選択します。

これでプロジェクトが作成されました。
とりあえずこの段階で F5 を押してビルドしてみます。
すると、ブラウザに以下の画面が表示されると思います。

仕組み

上述した通り、私は ASP.NET も .NET Core も初めてのため、この画面がどういう仕組みで動作しているのかさっぱりわかりませんでした。
なので、少し調べてみた結果を書いてみます。

https://codezine.jp/article/detail/9778
まずプログラムのエントリーポイントとなる Main メソッドは Program.cs にあります。
そこを見てみると以下のようなコードになっています。

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup&rt;()
            .UseApplicationInsights()
            .Build();

        host.Run();
    }
}

ASP.NET Core ではクロスプラットフォーム対応のためアプリケーション内部に Kestrel という Web サーバーを内包しており、それを起動しているそうです。
しかし、実際には Kestrel 単体では動作させず、 Windows では IIS を、Linux などでは Apache や Nginx などをリバースプロキシサーバーとして使用し、それらを経由して Kestrel にアクセスするようにするみたいです。
上記のデバッグ画面表示時も IIS Express 経由で表示されているみたいです。

さて、上記のコードに .UseStartup<Startup>() という記述があり、これが最初に表示するページを指定しているのだそうです。
ここでは Starup というクラスが指定されており、その実体は Startup.cs というファイルに記述されています。
中身については以下のサイトの解説がわかりやすかったです。
http://blog.shibayan.jp/entry/20160517/1463468762

参考URL