标签:string Request Current userHostAddress HttpContext httpContext
在.Net异步webApi中我们需要记录日志信息,需要获取客户端的ip地址,我们需要使用:HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];来获取客户端的ip地址,在调用异步方法(wait Task.Run(() =>{ }))前需要将主线程中获取的HttpContext.Current对象存至缓存(Cache)中达到多线程共享的目的。如果不是通过主线程获取HttpContext.Current对象将会报空指针异常(NullPointerException)。
示例代码:
1 System.Web.HttpRuntime.Cache.Insert("context", System.Web.HttpContext.Current); //异步调用,HttpContext存入缓存线程共享 2 wait Task.Run(() =>{ })
工具类方法示例代码:
1 /// <summary> 2 /// 获取客户端IP地址(无视代理) 3 /// </summary> 4 /// <returns>若失败则返回回送地址</returns> 5 public static string GetHostAddress() 6 { 7 8 HttpContext httpContext = HttpContext.Current; 9 if (httpContext == null) 10 httpContext = HttpRuntime.Cache.Get("context") as HttpContext; 11 string userHostAddress = httpContext.Request.ServerVariables["REMOTE_ADDR"]; 12 13 if (string.IsNullOrEmpty(userHostAddress)) 14 { 15 if (httpContext.Request.ServerVariables["HTTP_VIA"] != null) 16 userHostAddress = httpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim(); 17 } 18 if (string.IsNullOrEmpty(userHostAddress)) 19 { 20 userHostAddress = httpContext.Request.UserHostAddress; 21 } 22 23 //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要) 24 if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress)) 25 { 26 return userHostAddress; 27 } 28 return "127.0.0.1"; 29 }
标签:string,Request,Current,userHostAddress,HttpContext,httpContext 来源: https://www.cnblogs.com/netlws/p/11059207.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。