ASP.NET Core APIプロジェクトでIISのApplication Initialization処理を使う方法

20927774 20 評価のポイント
2024-05-21T04:07:10.39+00:00

Visual Statio 2022でASP.NET Core APIテンプレートを使って.NET 6のアプリケーションを作成しています。

このアプリケーションをIISの運用環境に配置し、IISのApplication Initializaion機能を有効化していますが、アプリケーションプールのリサイクル後にweb.configで指定したURLへのアクセスが行われません。

※ウォームアップ処理によるアクセスはIISのアクセスログには出力されないため、アプリケーション内部でログ出力をするようにしていますが、ログがかかれず、イベントログにもエラーは出ていないため動いていないと判断。

その後の調査で、ASP.NET Core APIテンプレートでプロジェクトを作成する際に、デフォルトで「HTTPS用の構成」というところにチェックが入っていおり、このチェックにより、program.csの中に「UseHttpsRedirection()」のコードが入っていることが原因であることがわかりました。

UseHttpsRedirection()」の行をコメントアウトすると、期待通りApplication Initialization機能は動くのですが、デフォルトでチェックが入っている「HTTPS用の構成」という部分のチェックを外すのに少し抵抗があります。ASP.NET core APIで作成したアプリケーションに対して、Application Initializationを使うためのベストプラクティスについてアドバイスをいただきたくよろしくお願いいたします。

.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
39 件の質問
ASP.NET
ASP.NET
Web アプリケーションと XML Web サービスを構築するための Microsoft .NET Framework のテクノロジのセット。
2 件の質問
{count} 件の投票

承認済みの回答
  1. SurferOnWww 2,081 評価のポイント
    2024-05-22T02:44:39.7366667+00:00

    いろいろ不明点がありますが(正直言うと何か変)、そこはちょっと置いといて・・・

    期待通り、Application Initialization処理が動くことを確認しています。

    WeatherForecastController の Get メソッドが呼ばれてログが作られることで「Application Initialization処理が動く」と考えているようですが、動いてはいるがミドルウェア app.UseHttpsRedirection(); によるリダイレクトがうまくいってない(結果、Get メソッドは呼ばれない)だけということではありませんか?

    program.cs にログを取るコードを含めてアプリケーションプールのリサイクルを試したらどうなりますか? それでログが取れれば、Application Initialization は動いていることになります。

    そこが確認できれば、ミドルウェアによるリダイレクトがうまくいってないだけということで、その原因を探ることになると思います。

    だだ、ssl ポートの設定がなければ app.UseHttpsRedirection(); は働かないはずなので、質問者さんの環境で何故ダメなのかまでは自分はフォローしきれません。何かそういう設定をしたのではないかと思いますけど。

    ご参考までに、Program.cs に app.UseHttpsRedirection(); を設定するとどうなるかを、自分の開発環境で Web API を Visual Studio のテンプレートで作った場合ですが、以下に書いておきます。

    デフォルトの設定では HTTP で要求をかけると HTTPS の url にリダイレクトされます。下の Fiddler の画像の #16 を見てください。307 応答が返ってきて応答ヘッダの Location に HTTPS の url が設定されています。同じ localhost ながらポートが違うのが分かりますか?

    fiddler

    リダイレクト指示に従いブラウザは Location に指定された url を要求します。それが #18 で、応答は期待通り返ってきます。

    result

    想像ですが、質問者さんの環境では存在しないポートにリダイレクトされたのではなかろうかと思います。

    ただ、Microsoft のドキュメント「HTTPS を必須にする」にポートが使用できない場合は HTTPS へのリダイレクトは行われないと書いてあり、実際その通りです。

    なので、質問者さんがそのあたりに影響がある何かをしたのではなかろうかと想像してます。

    ちなみに、開発環境での ssl ポートの指定は launchSettings.json にあり、それにより上の Fiddler の画像で示したようにリダイレクトが働きます。

    そこで、この「UseHttpsRedirection()」のコメントアウトが、ベストプラクティスなのかどうか

    HTTPS は使わないということであれば対症療法にはなるかもしれませんが、少なくとも「ベスト」ではないです。ベストはもちろん原因を探して対処することです。


0 件の追加の回答

並べ替え方法: 最も役に立つ