博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
System.Web.NullPointerException
阅读量:7188 次
发布时间:2019-06-29

本文共 1628 字,大约阅读时间需要 5 分钟。

在.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         ///  2         /// 获取客户端IP地址(无视代理) 3         ///  4         /// 
若失败则返回回送地址
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 }

 

转载于:https://www.cnblogs.com/netlws/p/11059207.html

你可能感兴趣的文章
git 教程1
查看>>
django(一)
查看>>
架构探险笔记9-框架优化之参数优化
查看>>
循环链表(隔M杀1)
查看>>
【转】C语言中access函数
查看>>
Journal List
查看>>
JavaScript-构造函数模式
查看>>
浅试 Webview 一app 加载 H5小游戏
查看>>
谈谈OpenNI 2初体验
查看>>
stars
查看>>
Boosting决策树:GBDT
查看>>
投影矩阵
查看>>
微软职位内部推荐-Senior Software Engineer II-Search
查看>>
如何使用JCONSOLE 监控eclipse的tomcat
查看>>
SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
查看>>
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
查看>>
gitHub上如何设置或者取消电子邮箱提醒
查看>>
VC++2005快速构建安全的应用程序
查看>>
常用SQL整理
查看>>
Node.js笔记 - 安装express
查看>>