この記事は公開から3年以上経過しています。
ASP.NET Core開発でIIS Express(Kestrel)にアクセスする場合、既定では開発端末上からhttp://localhost:ポート番号
のようなローカルホスト名でしかアクセスできないが、これをhttp://192.168.1.100:ポート番号
のようなIPアドレスを使いつつ、外部ホストからアクセスする方法。
問題
ASP.NET CoreのIIS ExpressにホストIPアドレスを使ってアクセスすると
Bad Request – Invalid Hostname
HTTP Error 400. The request hostname is invalid.
のようなエラーが発生してページを表示できない。
対応
以下の手順でIISのバインディングアドレスの変更とURLプレフィックスの予約、ファイアウオールルールの追加を行う。
本例ではHTTP接続で、ローカルIP192.168.1.100
、ASP.NET Coreアプリケーションのポート番号62820
を例に説明します。IPアドレスやポート番号等は、お使いの環境に合わせて適宜修正してください。
-
ソリューション名\.vs\プロジェクト名\config\applicationhost.config
ファイル内のXPath/configuration/system.applicationHost/sites/site[@name="プロジェクト名.Server"]/bindings/binding/@bindingInformation
の値を
*:62820:localhost
から*:62820:192.168.1.100
に変更する。<bindings> <!-- <binding protocol="http" bindingInformation="*:62820:localhost" /> --> <binding protocol="http" bindingInformation="*:62820:192.168.1.100" /> </bindings>
-
Visual Studioの
プロジェクト名.Server
のプロパティWebサーバーの設定からアプリURLを変更する。
-
管理者権限のコマンドプロンプトで以下のコマンドを実行してURLプレフィックスを予約する。
netsh http add urlacl url=http://192.168.1.100:62820/ user=Everyone
成功すると以下のように表示される。
URL 予約を正常に追加しました
-
引き続き管理者権限のコマンドプロンプトで以下のコマンドを実行してファイアウオールルールを追加する。
netsh advfirewall firewall add rule name= "ASP.NET Core WASM App" dir=in action=allow protocol=TCP localport=62820
成功すると以下のように表示される。
OK
結果
起動中のIIS Expressがある場合は停止してからデバッガを起動すると、以下のように設定したIPアドレスに外部ホストから接続ができるようになります。
Linux上に構築したKVMのゲストWindows開発環境のBlazor WebAssemblyアプリケーションに、ホストのブラウザからアクセスしている図。
開発が終わるなどIPアドレスによるアクセスが不要になった場合はapplicationhost.config
のIPアドレスをlocalhost
に戻したうえで
netsh http delete urlacl url=http://192.168.1.100:62820/
netsh advfirewall firewall delete rule name= "ASP.NET Core WASM App"
を実行してURLプレフィックスの予約取り消し、およびファイアウオールルールの削除を行なってください。
参考ウェブサイトなど
Microsoft Docs
ASP.NET Core での HTTP.sys Web サーバーの実装:Windows Server を構成する
Microsoft Docs
Netsh http コマンド:add urlacl
Microsoft Docs
netsh ファイアウォールの代わりに netsh advfirewall ファイアウォールを使用して、ファイアウォールWindows制御する
以上です。