You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 3.1 Web API中获取用户的IP地址

ASP.NET Core 3.1 Web API 获取客户端IP地址解决方案

第一步:配置转发头中间件(必做)

默认情况下框架不会自动读取反向代理传递的客户端IP,需要先在Startup.cs中添加相关配置:

  1. 在ConfigureServices方法中注册转发头配置:
public void ConfigureServices(IServiceCollection services)
{
    // 配置转发头规则
    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto;
        // 如有固定反向代理地址,可添加到信任列表,示例为本地Nginx场景
        options.KnownProxies.Add(System.Net.IPAddress.Parse("127.0.0.1"));
    });

    services.AddControllers();
    // 其他服务注册逻辑
}
  1. 在Configure方法的最开头启用转发头中间件,优先级必须高于其他中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 必须放在中间件管道的第一行
    app.UseForwardedHeaders();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

第二步:控制器中获取IP

完成配置后直接从HttpContext中读取即可:

[ApiController]
[Route("api/[controller]")]
public class IpController : ControllerBase
{
    [HttpGet]
    public IActionResult GetVisitorIp()
    {
        string clientIp = HttpContext.Connection.RemoteIpAddress?.ToString();
        // 本地测试返回::1或127.0.0.1属于正常情况,部署到公网后会返回真实用户IP
        return Ok(new { ip = clientIp });
    }
}

非控制器场景获取IP

如果需要在服务层、工具类等非控制器代码中获取IP,需要先注册IHttpContextAccessor:

  1. 在ConfigureServices中添加注册逻辑:
services.AddHttpContextAccessor();
  1. 注入后即可使用:
public class CustomService
{
    private readonly IHttpContextAccessor _contextAccessor;

    public CustomService(IHttpContextAccessor contextAccessor)
    {
        _contextAccessor = contextAccessor;
    }

    public string GetClientIp()
    {
        return _contextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString();
    }
}

常见问题说明

  • 本地测试拿到的::1是IPv6格式的回环地址,属于正常现象,部署到公网服务器后会返回真实用户IP
  • 如果使用了CDN、负载均衡等代理服务,必须配置转发头,否则获取到的会是代理服务器的IP
  • 如果返回的IP包含多个逗号分隔的地址,第一个值就是真实客户端IP,后续为经过的各层代理IP

内容的提问来源于stack exchange,提问作者Võ Thái Phúc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:18:04