追风赶月莫停留,平芜尽处是春山。这篇文章主要讲述HttpContext.Current.Server.MapPath("
/"
) 未将对象设置到对象的实例异常。相关的知识,希望能为你提供帮助。
多线程中的System.Web.HttpContext.Current.Server.MapPath("/")
多线程中Server.MapPath会失效。。。
网上找到几种解决方法,现在整理如下:
第一种:
System.Web.HttpContext.Current.Server.MapPath("/")
这个常用来表示网站的根目录,但是在多线程中,会发生未将对象引用设置到对象的实例。 所以不要分布在不同的类中,尽量在一个全局位置,然后其它类共用这个,毕竟网站的目录是不会改变的,可以用一个静态变量表示。
该方法:不太好;
第二种:
如果需要是WEB应用的目录下就很好办啊。假设web根目录为:c:\www,而DB放在www目录下的话则可以这样。
System.AppDomain.CurrentDomain.BaseDirectory.ToString()
+
ConfigurationManager.AppSettings["dbPath"]就可以了
我找到办法了,就是上面的
这个是一种方法,就是将路径下载配置文件中从配置文件读取,感觉还行。
第三种:
在多线程里面使用HttpContext.Current,HttpContext.Current是得到null的.
20150703 解释下为什么当前请求上下文会为null,因为多线程情况下,当前线程可能并非http请求处理线程,根本没发生请求,所以无法获取到HttpContext就是null.
这么用:
public static string MapPath(string strPath) { if (HttpContext.Current != null) { return HttpContext.Current.Server.MapPath(strPath); //有http请求 } else //非web程序引用 { strPath = strPath.Replace("/", "\\"); if (strPath.StartsWith("\\")) { //strPath = strPath.Substring(strPath.IndexOf(‘\\‘, 1)).TrimStart(‘\\‘); strPath = strPath.TrimStart(‘\\‘); } return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath); } }
【HttpContext.Current.Server.MapPath(" /" ) 未将对象设置到对象的实例异常。】
推荐阅读
- IT观察网络通信图片显示数据库操作……Android程序员如何利用开源框架
- MyBatis配置Mapping,JavaType和JDBCType的对应关系
- java app鸿鹄社交娱乐直播平台
- virtualenv 和 virtualenvwrapper
- Android(CheckBox控件)
- 纯净版xp系统如何打开磁盘配额|XP系统打开磁盘配额图文详细教程
- 绿茶xp系统网上邻居没有左侧菜单选项的处理办法
- XP系统如何禁用浏览器加载项|XP系统禁用浏览器加载项图文详细教程
- 中关村XP系统设置自动清理Temp文件夹的办法