0

我有一個獲取向Azure WebApps上承載的ASP.NET 5應用程序發送請求的客戶端的IP地址的問題。在IIS後面的Azure WebApps上部署ASP.NET 5

我的項目使用ASP.NET 5 + MVC6並在完整的CLR運行時(不是CoreCLR)上運行。我已經通過網絡搜索了答案,但還沒有找到任何解決方案。

Get the client's IP address 使用sugggestion我已經試過:

HttpContext.Connection.RemoteIpAddress 

但HttpContext.Connection屬性都是有誤或無效,因此在這裏沒有運氣。

我注意到了以下幾點:當我通過Visual Studio使用IIS Express運行我的應用程序時,IP從Connection.RemoteIpAddress可用。 當我通過命令行運行dnx web時,屬性爲空。似乎azure在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

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

} 
+0

我已經回答了這個問題(IIS /紅隼)的第一部分。關於客戶端IP,包Microsoft.AspNet.IISPlatformHandler和中間件UseIISPlatformHandler()應該根據https://github.com/aspnet/Templates/issues/189轉發客戶端IP。你確定要使用它嗎? –

+0

這會重定向本地實例上的IP,但不會在部署的Azure網站上重定向。 –

回答

2

Azure的Web應用程序的配置方法總是使用IIS。

但是,對於ASP.NET 5代碼,IIS配置爲使用HttpPlatformHandler將請求重定向到Kestrel(ASP.NET 5 Web服務器)。 這是從ASP.NET Beta 8運行ASP.NET 5應用程序的方式。 您將通過打開web.config文件來看到該配置。

參考文獻:

有與使用紅隼時,獲得客戶端IP地址的一些懸而未決的問題,他們似乎在RC2版本中得到解決:

+0

我使用RC1-final –

+0

然後,您將具有我描述的post8 beta行爲:IIS用作向Kestrel發送請求的反向代理。 –

+0

但是在部署到Azure時它不工作... –