zoukankan      html  css  js  c++  java
  • System.Web.NullPointerException

    在.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         }
  • 相关阅读:
    POJ 3669 Meteor Shower【BFS】
    用于JS日期格式化,以及简单运算的Date包装工具类
    asp+jQuery解决中文乱码
    jQuery制作信息提示弹出层插件【推荐】
    让 SyntaxHighlighter 3.x 支持 Lua 语法着色
    JQuery操作TABLE,及console.info问题。
    可加装广告的swf播放器JS代码
    Java 绘制环形的文字 (Circle Text Demo)
    Java数据库操作类演示
    Java 通过 HTTP 下载文件
  • 原文地址:https://www.cnblogs.com/netlws/p/11059207.html
Copyright © 2011-2022 走看看