.NET6 获取请求的ip

这篇具有很好参考价值的文章主要介绍了.NET6 获取请求的ip。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在.NET 6中,获取请求的IP地址需要使用HttpContext类。HttpContext对象提供了访问当前HTTP请求和响应的方法和属性,其中之一就是远程IP地址。

1.为了获取请求的IP地址,首先需要通过HttpContext获取到IHttpContextAccessor接口的实现。这个接口提供了有关当前HTTP连接的信息,包括远程IP地址。通过调用RemoteIpAddress属性,就可以获取到请求的IP地址了。

这是微软的官方文档:

.net 6 httpcontext 获取ip,.net,tcp/ip,网络协议

文档地址

正好最近在写一个获取登录ip地址的方法,下面是代码:

1.写一个RealIpMiddleware中间件:

public class RealIpMiddleware
{
    private readonly RequestDelegate _next;

    public RealIpMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        var headers = context.Request.Headers;
        if (headers.ContainsKey("X-Forwarded-For"))
        {
            context.Connection.RemoteIpAddress = IPAddress.Parse(headers["X-Forwarded-For"].ToString().Split(',', StringSplitOptions.RemoveEmptyEntries)[0]);
        }
        return _next(context);
    }
}

2.在Program.cs中加上以下代码以达到应用中使用中间件: 

.net 6 httpcontext 获取ip,.net,tcp/ip,网络协议

app.UseMiddleware<RealIpMiddleware>();

3.在控制器中获取ip,以下是在控制器中获取ip的代码:

private IHttpContextAccessor _accessor;

public LoginController(IHttpContextAccessor _accessor)
{
    _accessor = accessor;
}


//以上是依赖注入

var remoteIpAddress = accessor.HttpContext.Connection.RemoteIpAddress.ToString(); //获取ip

这样我们就可以获取请求的ip了。

在获取ip地址后就可以使用百度地图的api获取登录的地址,下面是代码:

string url = $"https://api.map.baidu.com/location/ip?ip=获取的ip&coor=bd09ll&ak=你的accesstoken";
string res = await CurlHelper.GetData(url);


public static async Task<string?> GetData(string url)
{
    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Add("Accept", "application/json");//设置请求头
        //get
        var url1 = new Uri(url);
        // response
        var response = httpClient.GetAsync(url1).Result;
        var data = response.Content.ReadAsStringAsync().Result;
        return data;
    }
}

2.需要注意的是,要正确获取IP地址,应用程序必须部署在支持HTTP连接特征的环境中,例如IIS或Kestrel服务器。这是因为在某些环境中,例如开发环境,可能无法准确地获取到客户端的IP地址。

3.另外,还需要注意的是,由于存在代理服务器、负载均衡器等中间件,获取到的IP地址可能与客户端实际使用的IP地址不一致。因此,在处理IP地址时需要考虑到这种情况,并进行相应的处理。

4.总结来说,在.NET 6中获取请求的IP地址需要使用HttpContext类和IHttpContextAccessor 接口。要确保正确获取IP地址,需要部署在支持HTTP连接特征的环境中,并考虑到可能存在的中间件对IP地址的影响。

最后向大家介绍一下在开发中我使用的后端框架----Fruion,让 .NET 开发更简单,更通用,更流行。官网地址如下:

让 .NET 开发更简单,更通用,更流行。 Furion | Furion

是一个非常不错的框架,上手快速,对新手也很友好,官方文档也很详细,使.net开发更加方便快捷。可惜有一部分文档需要收费了,大家可以支持一下开源作者。文章来源地址https://www.toymoban.com/news/detail-847500.html

到了这里,关于.NET6 获取请求的ip的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊一聊 tcp/ip 在.NET故障分析的重要性

    这段时间分析了几个和网络故障有关的 .NET程序 之后,真的越来越体会到计算机基础课的重要,比如 计算机网络 课,如果没有对 tcpip协议 的深刻理解,解决这些问题真的很难,因为你只能在高层做黑盒测试,你无法看到 tcp 层面的握手和psh通讯。 这篇我们通过两个小例子来

    2024年02月05日
    浏览(44)
  • .NET网络编程——TCP通信

            就是将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。       

    2024年02月16日
    浏览(33)
  • .Net6下使用Ado.Net

    Ado.Net,是微软提供的在.Net平台下操作数据库(本文实例记录MySQL、SQLSever数据的基本操作)、XML文件和应用程序数据的一个工具。是应用程序和数据库之间的数据桥梁。它拥有一组丰富的类、方法和接口,有效地处理数据库中的数据。(上层的ORM框架《EFCore、Dapper等》都是对它

    2024年02月05日
    浏览(39)
  • 【Net6】Net 5.0迁移到Net 6.0

    .NET 5.0 将于 2

    2024年02月04日
    浏览(33)
  • ASP.NET 获取客户端IP、MAC地址

      qqwry.dat 纯真IP数据库下载地址:   

    2024年02月15日
    浏览(35)
  • .net core WebAPI 获取客户端IP的地址

    1、写个扩展方法在控制器里面: 注:不能创建外部类,否则会报错,HttpContext必须是和带有继承ControllerBase的类一起才行 1.在Startup.cs文件里注入服务: 2、去控制器里面写入:

    2024年02月03日
    浏览(36)
  • .Net6 .Net7 支持的 Windows 版本

    .NET 6 支持下列 Windows 版本: (OS) Version 体系结构 Windows 11 21H2 x64、Arm64 Windows 10 客户端 1607+ x64、x86、Arm64 Windows 客户端 7 SP1+、8.1 x64、x86 Windows Server 2012+ x64、x86 Windows Server 核心 2012+ x64、x86 Nano Server 1809+ X64 如果要在以下 Windows 版本上安装 .NET SDK 或运行时,则需要其他依赖项:

    2024年02月16日
    浏览(26)
  • Ubuntu 安装.net6.0+配置 .net环境变量

    wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh sudo chmod +x ./dotnet-install.sh 该脚本默认安装最新的 长期支持 (LTS) SDK 版本,即 .NET 6。 若要安装最新版本(可能不是 LTS) 版本的 (版本),请使用  --version latest  参数。 ./dotnet-install.sh --version latest 若要安装 .NET 运行时而非 SDK,

    2024年02月09日
    浏览(38)
  • 【网络协议】TCP/IP 协议

    1、TCP/IP 模型 TCP/IP 协议模型,包含了一系列构成互联网基础的网络协议,是 Internet 的核心协议。 基于 TCP/IP 协议栈可分为四层或五层,转换为 OSI 参考模型,可以分为七层,分别如下图所示: 通常我们所说的都是基于 TCP/TP 五层模型。 2、TCP/IP 协议栈每一层功能 应用层:H

    2024年02月12日
    浏览(36)
  • ASP.NET Core NET6 EFCore MySQL

    ASP.NET Core 下使用 EFCore 和 .NET Framework 下使用有点区别。 参考官方文档:https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html 1.创建 ASP.NET Core Web应用 项目 创建新的项目的 Program.cs 文件中使用了顶级语句,与NET5 有所区别。 .NET 6 的 创建的项目使用了C# 顶级语句 ht

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包