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
相关产品推荐
相关产品推荐

