0

Azure WebApps でホストされている ASP.NET 5 アプリケーションに要求を送信したクライアントの IP アドレスを取得する際に問題があります。

私のプロジェクトは ASP.NET 5 + MVC6 を使用し、完全な CLR ランタイム (CoreCLR ではない) で実行されます。答えをネットで検索しましたが、解決策が見つかりませんでした。

Get the client's IP addressからの提案を使用し て試しました:

HttpContext.Connection.RemoteIpAddress

しかし、HttpContext.Connection のプロパティはすべて false または null であるため、ここではうまくいきません。

次のことに気付きました: IIS Express を使用して Visual Studio 経由でアプリを実行すると、からの IPConnection.RemoteIpAddressが利用可能です。コマンドラインからdnx webを実行すると、プロパティが null になります。Azure は、IIS ではなく、dnx でアプリを実行しているようです。

私の質問は、 プロジェクトを構成して Azure WebApps にデプロイする方法です。そのため、IIS の背後で実行されるため、HttpContext.Connection の値が満たされますか?

現在の構成 (project.json の抜粋):

(...)
    "compilationOptions": {
        "emitEntryPoint": true
      },
    "commands": {
        "web": "Microsoft.AspNet.Server.Kestrel",
        "ef": "EntityFramework.Commands"
      },

      "frameworks": {
        "dnx451": { }
      },
(...)

および Startup.cs の Configure メソッド

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{  
    app.UseIISPlatformHandler();
    //rest of the method...

}
4

1 に答える 1

2

Azure Web App は常に IIS を使用します。

ただし、ASP.NET 5 コードの場合、IIS は HttpPlatformHandler を使用して要求を ASP.NET 5 Web サーバーである Kestrel にリダイレクトするように構成されています。これは、ASP.NET Beta 8 から ASP.NET 5 アプリケーションを実行する方法です。web.config ファイルを開くと、その構成が表示されます。

参考文献:

Kestrel を使用する場合のクライアント IP アドレスの取得に関連するいくつかの未解決の問題があり、RC2 リリースで解決されているようです。

于 2015-12-30T14:23:47.770 に答える