HttpContext.Current.Server.MapPath("/") 未将对象设置到对象的实例异常。
2017-11-02 09:09
295 查看
多线程中的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.
这么用:
多线程中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("/") 未将对象设置到对象的实例异常。
- HttpContext.Current.Server.MapPath("") 未将对象设置到引用的实例异常。
- System.Web.HttpContext.Current.Server.MapPath("~/upload/SH") 未将对象引用设置为实例对象
- HttpContext.Current.Cache 提示:未将对象引用设置到对象的实例
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例上[转]
- ashx中应用HttpContext.Current.Session ,呈现未将对象引用设置到实例(转)
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例
- string s = HttpContext.Current.Server.MapPath("");
- HttpContext.Current.Session ,出现未将对象引用设置到实例上
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例上
- HttpContext.Current.Session[strName]未将对象引用设置到对象的实例
- ASP.NET Forum 中禁用含有子版块的版块后产生的"未将对象引用设置到对象的实例"异常的处理方法
- 未将对象引用设置到对象的实例"异常的原因
- ASP.NET关于"未将对象引用设置到对象的实例"异常的原因
- 未将对象引用设置到对象的实例"异常的原因
- "未将对象引用设置到对象的实例"异常的原因
- 异常:已捕获: "Error creating context 'spring.root': 未将对象引用设置到对象的实例。" (System.Configuration.ConfigurationErrorsException) 捕获到一个 System.Configuration.ConfigurationErrorsException: "Error creating context 'sp