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);
          }
      }
时间: 2024-12-13 12:23:54

HttpContext.Current.Server.MapPath("/") 未将对象设置到对象的实例异常。的相关文章

HttpContext.Current.Session[strName]未将对象引用设置到对象的实例

项目开发是在4.5.1上,不知道为啥客户提供的服务器上安装的是4.5,差别不大也没去升级,然后部署MVC的时候web.config报错 <system.web> <compilation debug="true" targetFramework="4.5.1"/> <httpRuntime targetFramework="4.5.1"/> </system.web> 然后也没在意就把这段给删掉了,

SQL Server 2012 未将对象引用设置到对象的实例。(SQLEditors)

1.错误描述 2.错误原因 创建了student数据库后,使用数据库时出现语法错误 use student; 3.解决办法 (1)重装SQL Server 2012 版权声明:本文为博主原创文章,未经博主允许不得转载.

Server.MapPath 出现未将对象引用设置到对象的实例

本文摘引自Yammis的博客,地址是:http://www.cnblogs.com/newsouls/p/3345608.html 此文仅在于使遇到相似问题的朋友能少走弯路 asp.net中我用一个页面的cs文件调用一个自定义类,这个自定义类再调用System.Web.HttpContext.Current.Server.MapPath方法,于是就产生了未将对象引用设置到对象的实例的错误提 示,原来以为是一个自定义类调用另一个自定义类的问题,搜索了半天没找到答案 于是想直接用自定义类调用Syst

HttpContext.Current.Server未将对象引用到实例

问题描述: 在一些类库中需要读取当前系统的xml文件,当时用HttpContext.Current无法找到实例化对象 解决代码如下: XmlDocument xml = new XmlDocument(); //加载xml文件 try { if (HttpContext.Current != null) { xml.Load(HttpContext.Current.Server.MapPath("~/Configs/CityAreas.xml")); } else { xml.Load

2014-08-26 解决HttpContext.Current.Session在ashx文件中出现“未将对象引用设置到对象的实例”的问题

今天是在吾索实习的第35天. 最近在使用HttpContext.Current.Session来获取Session["..."]的值时,常常会弹出错误——“未将对象引用设置到对象的实例”. 所以,在网上搜索了一番,发现如下解决方法: 引用:using System.Web.SessionState; 让要用到HttpContext.Current.Session的继承IReadOnlySessionState.如:public class {ClassName}: IHttpHandl

关于URLRewriter报错:System.NullReferenceException: 未将对象引用设置到对象的实例 的解决

检查网站日期,发现内容如下:System.NullReferenceException: 未将对象引用设置到对象的实例. 在 URLRewriter.ModuleRewriter.Rewrite(String requestedPath, HttpApplication app) 在 URLRewriter.BaseModuleRewriter.BaseModuleRewriter_AuthorizeRequest(Object sender, EventArgs e) 在 System.Web

未将对象引用设置到对象的实例--可能出现的问题总结

一.网络上的一般说法 1.ViewState 对象为Null.2.DateSet 空.3.sql语句或Datebase的原因导致DataReader空.4.声明字符串变量时未赋空值就应用变量.5.未用new初始化对象.6.Session对象为空.7.对控件赋文本值时,值不存在.8.使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值.9.使用FindControl时,控件不存在却没有做预处理.10.反复定义造成未将对象引用设置到对象的实例错误. 二. (1

ashx文件中使用session提示“未将对象引用设置到对象的实例”

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Web.SessionState;namespace friends {    /// <summary>    /// Handler 的摘要说明    /// </summary>    public class Handler : IHttpHandler

一般处理程序中使用Session出现未将对象引用设置到对象的实例

遇到问题:未将对象引用设置到对象的实例 那就在你的一般处理程序中加入红色背景的代码吧 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Web.SessionState; //引用命名空间 namespace gl.webweb.gl_web.ashx { //实现接口 public class login : I