asp.net core获取HttpContext相关操作

本文介绍了一种在.NET Core环境中通过静态类和依赖注入获取客户端IP地址的方法。此方法利用了HttpContext来读取请求头信息,确保能正确获取经过代理服务器后的客户端真实IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 建立类:
 2 
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Threading.Tasks;
 7 using Microsoft.AspNetCore.Http;
 8 
 9 namespace Iyibank.Core
10 {
11 public static class MyHttpContext
12 {
13 public static IServiceProvider ServiceProvider;
14 
15 static MyHttpContext()
16 { }
17 
18 
19 public static HttpContext Current
20 {
21 get
22 {
23 object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
24 
25 HttpContext context = ((IHttpContextAccessor)factory).HttpContext;
26 return context;
27 }
28 }
29 }
30 }
31 
32 Startup.cs添加如下
33 
34  public void ConfigureServices(IServiceCollection services)内容下添加如下
35 
36  services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
37 
38 Configure修改如下
39 
40 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,IServiceProvider svp)
41 
42 Configure下添加以下内容
43 
44    Iyibank.Core.MyHttpContext.ServiceProvider = svp;
45 
46 这样在其他地方需要使用时,直接调用即可
47 
48 /// <summary>
49 /// 获得当前页面客户端的IP
50 /// </summary>
51 /// <returns>当前页面客户端的IP</returns>
52 public static string GetIP()
53 {
54 //try
55 //{
56 string result = (MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"].ToString() != null
57 && MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"] != String.Empty)
58 ? MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"]
59 : MyHttpContext.Current.Request.Headers["REMOTE_ADDR"];
60 // string result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
61 if (string.IsNullOrEmpty(result))
62 result = MyHttpContext.Current.Request.Headers["HTTP_X_FORWARDED_FOR"];
63 
64 if (string.IsNullOrEmpty(result) || !Utils.IsIP(result))
65 return "127.0.0.1";
66 
67 return result;
68 //}
69 //catch
70 //{
71 // return "127.0.0.1";
72 //}
73 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值