var test1 = HttpContext.Features.Get<IHttpConnectionFeature>();
var test2 = HttpContext.Connection.RemoteIpAddress;
在IISExpress上本地运行应用程序时,这两行正确返回值0:0:1
。
当我在IIS 7.5(在VM上运行)上发布应用程序时。 RemoteIpAddress
总是null
我正在使用ASP.Net 5 RC 1。
如何在ASP.NET 5应用程序中获取客户端的IP地址?
我在以下问题中尝试了解决方案,但是我遇到了上面提到的问题:
你所看到的是准确的,如果没有用的话。 IIS处的连接终止,然后转发到v.next Web服务器Kestrel,因此与Web服务器的连接确实来自localhost。
您需要做的是启用对X-Forwarded-For的支持
Microsoft.AspNet.HttpOverrides
包Configure()
方法添加
app.UseOverrideHeaders(new OverrideHeaderMiddlewareOptions
{
ForwardedOptions = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
请注意,此包将在RC2中更改,以使其更安全。
在ASP.NET Core 2.0
项目中,您需要添加包Microsoft.AspNetCore.HttpOverrides
并将此代码添加到您的Configure
方法:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
那是因为你试图从localhost连接。如果您在同一LAN中有另一台计算机,请尝试连接此PC但使用用户IP而不是localhost。