【问题标题】:How to get the client's ip address in .net standard?如何在.net标准中获取客户端的IP地址?
【发布时间】:2020-07-11 01:27:48
【问题描述】:

我需要在 .net 标准 2.1 类库应用程序中获取客户端的 IP 地址。

我正在使用下面的代码,它在 .net 框架中按预期工作,但在 .net 标准中它给出了编译错误。

private string IPAddress { get { return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; } }

错误 CS1061 'HttpRequest' 不包含 'ServerVariables' 和不可访问的扩展方法 'ServerVariables' 可以找到接受“HttpRequest”类型的第一个参数(是 您缺少 using 指令或程序集引用?)

【问题讨论】:

    标签: c# .net .net-standard


    【解决方案1】:

    我已经使用过它并为我工作:

        public static string GetLocalIpAddress()
        {
            try
            {
                using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
                {
                    socket.Connect("8.8.8.8", 65530);
                    var endPoint = socket.LocalEndPoint as IPEndPoint;
                    Logger.LogMessage("Local Ip Address detected: " + endPoint.Address.ToString());
                    return endPoint.Address.ToString();
                }
            }
            catch (Exception ex)
            {
                Logger.LogMessage(null, "Error obtaining local ip address:" + ex.Message);
                return "";
            }
    
        }
    

    【讨论】:

    • 谢谢,我可以成功构建解决方案,我会检查它是否给出预期的结果并告诉你
    【解决方案2】:

    您使用的是 .NET Standard,它不包含诸如(HttpRequest 及其扩展方法)之类的依赖项,因此您需要安装链接到 HttpRequest 的 Nuget 包或将您的 .NET 标准项目转换为.NET 网络应用程序。前一个包含包含您的 HttpRequest 的包。

    参考:HttpContext in .net standard library

    【讨论】:

    • 我已经添加了Microsoft.AspNetCore.Http.Abstractions and Microsoft.AspNet.Mvc`包,如果需要添加其他的请告诉我
    猜你喜欢
    • 2017-07-06
    • 2012-03-14
    • 2012-02-16
    • 2023-03-19
    • 2015-12-20
    • 2016-03-29
    • 2019-01-14
    • 2021-10-22
    相关资源
    最近更新 更多