ご無沙汰しております。MLBお兄さんこと松村です。
なかなかブログを書いてない間に MLB は2021年シーズンが終わってしまっていました。大谷選手、MVP受賞おめでとうございます!!
Shohei Ohtani is your unanimous American League Most Valuable Player!
— Los Angeles Angels (@Angels) 2021年11月18日
アメリカン・リーグ最優秀選手:大谷翔平 pic.twitter.com/A2TwdsUdo1
さて、今回は11月に一般提供が始まった .NET 6.0 の検証をしているなかで見つけた変更点を書きたいと思います。
ASP.NET Core には Kestrel という Web サーバーが内包されており、 dotnet run
コマンド実行時には Kestrel を介して Web アプリケーションにアクセスします。
$ dotnet new web -n myapp60 -f net6.0 $ cd myapp60 $ dotnet run ビルドしています... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7285 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5290 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\yuta\source\repos\netcore\tmp\myapp60\
ちなみに ASP.NET Core 6.0 になってから、既定のポート番号が 5000 や 5001 ではなくなりました。
5000 や 5001 じゃないと困る!って方は Properties/launchSettings.json を書き換えましょう。
launchSettings.json を変更するのではなく特定の環境のみ (Development
など) ポート番号を変更したいというケースもあります。
そういった場合、これまで*1は appsettings.json や appsettings.{Environment}.json に "Urls"
という項目を設けて実行時の URL を上書きすることができました。
例えば ASP.NET Core 5.0 の appsettings.json に対して以下の設定を行います。
{ "Urls": "http://localhost:7000;https://localhost:7001", "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
dotnet run
コマンドでアプリケーションを実行すると appsettings.json で指定した URL で起動します。
$ dotnet run ビルドしています... info: Microsoft.Hosting.Lifetime[0] Now listening on: http://localhost:7000 info: Microsoft.Hosting.Lifetime[0] Now listening on: https://localhost:7001 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\yuta\source\repos\netcore\tmp\myapp50
しかし ASP.NET Core 6.0 では上述のような "Urls"
設定が反映されなくなりました。*2
実際に試してみると "Urls"
設定が Kestrel に反映されていないことがわかります。
$ cat appsettings.json { "Urls": "http://localhost:7000;https://localhost:7001", "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } $ dotnet run ビルドしています... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7285 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5290 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\yuta\source\repos\netcore\tmp\myapp60\
ではどうすればいいかというところですが、 "Kestrel"
設定に対してエンドポイントの構成を行うようにします。
なお "Kestrel"
設定は .NET Core 2.1 や 3.1 の頃からある設定です。
$ cat appsettings.json { "Kestrel": { "Endpoints": { "Http": { "Url": "http://localhost:7000" }, "Https": { "Url": "https://localhost:7001" } } }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } $ dotnet run ビルドしています... warn: Microsoft.AspNetCore.Server.Kestrel[0] Overriding address(es) 'https://localhost:7285, http://localhost:5290'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead. info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:7000 info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7001 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Users\yuta\source\repos\netcore\tmp\myapp60\
既存の ASP.NET Core のアプリケーションを .NET 6.0 にアップグレードしたときなど、Kestrel の URL やポート番号を以前のままにしたい場合があれば、上記の手順での設定を参考にしてみてください。