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ヘッダーをオンにしたままだとこちら

f:id:CreatioVitae:20191029191430p:plain
Server:Kestrel

.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ヘッダーをオフにした場合

f:id:CreatioVitae:20191029220006p:plain

.NET Core 2.2 => 3.0は色々使い勝手やパフォーマンスに配慮されて進化しているので、色々APIも統廃合や新設が進んでいますが、プロダクトをグロースさせるためにも引き続き学んでいこうと思います。(小並感)