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

C# .NET 6.0 Minimal API 如何获取请求客户端IP地址

ASP.NET Core Minimal API 获取客户端IP实现方案

你已完成转发头中间件的基础配置,只需在接口处理逻辑中注入HttpContext即可直接读取客户端IP,无需额外注册服务。

具体实现

直接在路由委托的参数列表中加入HttpContext类型参数,通过Connection.RemoteIpAddress属性即可获取客户端IP:

app.MapGet("/SomeRoute/{data}", async (long data, Context appDb, HttpContext httpContext) =>
{    
    // 读取客户端IP
    var clientIp = httpContext.Connection.RemoteIpAddress?.ToString();

    // 可选:处理IPv4地址被映射为IPv6格式的场景(例如::ffff:192.168.1.100),转换为纯IPv4格式
    if (httpContext.Connection.RemoteIpAddress?.IsIPv4MappedToIPv6 == true)
    {
        clientIp = httpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
    }

    // 后续可按需使用clientIp做日志记录、访问限制等业务逻辑
    var tabladata = await appDb.Table1
        .Where(some code here)
        .ToListAsync();
    return Results.Ok(tabladata);
});

注意事项

  • 本地调试时拿到的::1或127.0.0.1是本地回环地址,属于正常现象,部署到公网环境、经反向代理访问时会返回真实客户端IP。
  • 生产环境建议在转发头配置中添加可信代理IP,避免攻击者伪造X-Forwarded-For请求头骗取虚假IP,配置示例如下:
// 需先引入using System.Net;命名空间
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 替换为你实际使用的反向代理/负载均衡服务器IP
    options.KnownProxies.Add(IPAddress.Parse("你的代理服务器IP"));
});
  • 一定要保证app.UseForwardedHeaders()中间件放在其他处理请求的中间件(比如授权中间件、接口路由映射配置等)之前,否则转发头不会被正确解析。

内容的提问来源于stack exchange,提问作者Rafael Alfredo Zelaya Amaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:09:39