Asp.net core 2.0 mvc应用程序使用负载平衡器选项获取客户端ip地址

问题描述 投票:0回答:1

我无法使用.net core 2.0应用程序获取客户端IP地址。

我在startup.cs文件中使用了以下代码。

我在homecontriller.cs文件中使用了以下代码。

我在本地获取remoteIpAddress为1.0.0.0。当我在服务器中部署时,我获得了服务器IP地址,但是我想显示客户端IP地址。你能帮忙吗谢谢。

services.Configure<ForwardedHeadersOptions> (options => {
 options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor> ();
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor> ();


public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
 app.UseForwardedHeaders(new ForwardedHeadersOptions {
  ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
 });
}

public IActionResult Index() {
 string remoteIpAddress = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
 if (Request.Headers.ContainsKey("X-Forwarded-For")) {
  remoteIpAddress = Request.Headers["X-Forwarded-For"];
 }

 ViewBag.ip1 = remoteIpAddress.ToString();
 return View();
}
asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-2.1
1个回答
0
投票

在project.json中添加依赖项:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0"

在Startup.cs中,在Configure()方法中添加:

app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor |
        ForwardedHeaders.XForwardedProto
    });  

和控制器中

using Microsoft.AspNetCore.HttpOverrides;

然后通过这种方式可以获得IP地址

Request.HttpContext.Connection.RemoteIpAddress
© www.soinside.com 2019 - 2024. All rights reserved.