Moss’s blog

すごくなるためのブログ

ASP.NET Core on Webサーバー(kestrel)

  • ASP.NET Coreで作成したアプリケーションを用意して、
  • 上記をWebサーバー上で起動させます。

調べてみた

  • 最初思いついたのは、Azure。しかし、これは登録とかが面倒だし、やりたいことの手前で力尽きそうなので却下しました。
  • 次に、IIS。これでしょう!と思い、作業開始
  • しかし、結果から言うと、(テンプレートで作った)ASP.NET Coreアプリケーションを起動すると、デフォルトでKestral(ケストラル)というWebサーバー機能が内包され、別途Webサーバーと起動する必要がなかった。

やりかた

  • 以下の手順でアプリケーションを作ります。(VSCodeからのやり方です)*1

1). VSCodeを起動

2). Terminalにて、プロジェクト作成ディレクトリへ移動

cd d:\study\dotnet

3). 続けて、以下のコマンドを実行。テンプレートプロジェクトが生成されます。

dotnet new mvc

4). VSCodeで生成したプロジェクトフォルダを開きます。

[File] > [Open Folder...]

5). Terminalから以下のコードを実行。セキュリティの話。

dotnet dev-certs https --trust

6). デバッグなしで開始する

[Debug] > [Run without Debugging]

別デバイスからのアクセス

  • 上記の手順だけでは、スマホなど別デバイスからアクセスできず、開発環境PCからしかWebページを表示できません。
  • そこで、以下の手順を実行します。*2
  • こうすることで、別デバイスからでもWebページを表示できるようになります。(Developmentモード時の設定です)

1). appsettings.Development.json を開く

2). "urls": "http://:5000;https://:5001", を追加します。

{
  "urls": "http://*:5000;https://*:5001",
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

Kestralについて

  • ASP.NET Coreアプリケーションが内容できるWebサーバー機能。
  • 使用しない方法や、IISと連携させる方法ある。*3
  • MVCテンプレートを使うと、Program.csに以下のコードがある。
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });
  • ConfigureWebHostDefaults()コールによって、Kestralが起動するようになっている。
  • ネット上のコードを見ると、わざわざUseKestral()をコールする処理が記述されていたりして紛らわしい。
  • 初心者は、まずはテンプレートを使えばいいかな。