ASP.NET CoreでProgram.csを見たり、Serverヘッダー:Kestrelをオフにしてみる
Program.cs周りのコードを確認してみる。
ASP.NET Core の2.2時代のテンプレートは、WebHost(IWebHostBuilder)が使用されていました。
コードベースはこんな感じ。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>();
3.0からはHost(Webに限定しない汎用的なホスト)を利用する形に変わりました。
コードベースはこんな感じ。
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
コードを見るとわかりますが、HostはWebHostも包含しているので、WebHostの設定は、ConfigureWebHostDefaultsの中に書いていきます。
Serverヘッダーをオフにしてみる
=>レガシーのASP.NET / MVC /WebApi時代も、x-powered-byとか、Serverとかのヘッダーが出てると色々アレなので消すことが多かったと思います。 Kestrelもつまるところ、ASP.NET Coreですよーっていう名札になるので同様に消したい欲があるので2.2 / 3.0でのServerヘッダーの消し方を見ていきましょう。
(ご参考)Serverヘッダーをオンにしたままだとこちら
.NET Core 2.2での書き方
2.2では.UseKestrelを使用します。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseKestrel(options => options.AddServerHeader = false) .UseStartup<Startup>();
.NET Core 3.0での書き方
3.0ではオプションを差し込むだけなら、ConfigureKestrelを使用します。 今回は本筋じゃないので割愛しますが、TestHostを利用する際などに、HostBuilderを生成する場合はUseKestrelを使用した後にConfigureKestrelを使用するようです。 このへんはTestHostの.NET Core 3.0対応をするタイミングで(たぶん)詳しく触れることになりそうです。
public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder .ConfigureKestrel(options => options.AddServerHeader = false) .UseStartup<Startup>(); }); }
Serverヘッダーをオフにした場合
.NET Core 2.2 => 3.0は色々使い勝手やパフォーマンスに配慮されて進化しているので、色々APIも統廃合や新設が進んでいますが、プロダクトをグロースさせるためにも引き続き学んでいこうと思います。(小並感)