httpcontext.current.server.mappath对象引用未设置为对象的实例

时间:2011-07-28 15:15:17

标签: c# nullreferenceexception

我在一个类中使用以下代码:

string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");

文件teste.html位于文件夹

但是当它打开文件时,会生成以下错误:

  

对象引用未设置为对象的实例。

5 个答案:

答案 0 :(得分:73)

不要使用Server.MapPath。这很慢。请改用HttpRuntime.AppDomainAppPath。只要您的网站正在运行,您就可以随时使用此属性。

然后像这样使用它:

string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");

答案 1 :(得分:6)

如果代码未在线程内运行,则执行httprequest然后HttpContext.Currentnull(例如,当您通过BeginInvoke调用方法时) - 请参阅http://forums.asp.net/t/1131004.aspx/1

您始终可以使用HttpRuntime查看http://msdn.microsoft.com/en-us/library/system.web.httpruntime.aspx

答案 2 :(得分:4)

如果没有HttpContext(例如,当通过BeginInvoke调用方法时,正如Yahia所指出的那样),对HttpContext.Current.Server.MapPath()的调用必定会失败。对于这些情况,HostingEnvironment.MapPath()命名空间中有System.Web.Hosting

string filePath = HostingEnvironment.MapPath("~/email/teste.html");

答案 3 :(得分:0)

问题:我在一个类库项目中有一个“ Images”文件夹。但是使用上面的答案,我无法获取该文件夹的物理路径来读写该文件夹中的文件。

解决方案:下面的代码为我工作,以便在类库项目中获取物理路径。

string physicalPath = System.IO.Path.GetFullPath("..\\..\\Images");

我希望,它将对与我面临同样问题的人有所帮助。

答案 4 :(得分:0)

您可以使用类似以下代码的代码。需要注意的一件事是,我遇到了一个问题,我试图从TestMethod内访问.txt文件,但一切都失败了……是的,它也适用于非单元测试方案。

string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..") + "\\email\\teste.html";