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

ASP.NET Core 8 MVC项目获取IP地址报错的解决方法求助

解决ASP.NET Core 8 MVC中获取IP地址的SocketException问题

你遇到的异常是因为RemoteIpAddress可能是IPv6类型的IP地址实例,而Address属性仅适用于IPv4地址,直接访问会触发"不支持地址族"的SocketException。以下是修复方案:

1. 安全获取IP地址字符串

不要直接访问Address属性,改用以下代码兼容IPv4和IPv6场景:

var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
string clientIp = string.Empty;

if (remoteIpAddress != null)
{
    // 处理IPv6映射的IPv4地址(常见于本地调试或部分代理场景)
    if (remoteIpAddress.IsIPv4MappedToIPv6)
    {
        clientIp = remoteIpAddress.MapToIPv4().ToString();
    }
    else
    {
        clientIp = remoteIpAddress.ToString();
    }
}

2. 部署环境:处理反向代理场景

如果项目部署在Nginx、IIS等反向代理之后,默认RemoteIpAddress会返回代理服务器的IP而非客户端真实IP,此时需要配置转发头:

在Program.cs中添加以下配置:

// 配置转发头选项
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 添加已知代理服务器的IP,根据实际部署环境调整
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
});

// 在路由中间件之前启用转发头
app.UseForwardedHeaders();
app.UseRouting();

异常原因说明

当RemoteIpAddress是IPv6地址时,调用Address属性会抛出SocketException(错误代码10045),因为该属性是IPv4地址专属字段,用于获取32位的IPv4地址数值,完全不适用于128位的IPv6地址结构。

内容的提问来源于stack exchange,提问作者Madhu Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:43:19