.NET6 获取请求的ip

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

1.为了获取请求的IP地址,首先需要通过HttpContext获取到IHttpContextAccessor接口的实现。这个接口提供了有关当前HTTP连接的信息,包括远程IP地址。通过调用RemoteIpAddress属性,就可以获取到请求的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中加上以下代码以达到应用中使用中间件: 

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开发更加方便快捷。可惜有一部分文档需要收费了,大家可以支持一下开源作者。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值