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 运行我的应用程序时,IP fromConnection.RemoteIpAddress可用。当我通过命令行运行dnx web时,属性为空。似乎天蓝色在 dnx 上运行我的应用程序,而不是 IIS。

所以我的问题是: 如何配置项目并将其部署到 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 回答