40

I am using the following code within a class:

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

The file teste.html is in the folder

But when it will open the file the following error is being generated:

Object reference not set to an instance of an object.

soamazing
  • 1,396
  • 7
  • 21
  • 30
  • Is the call to `MapPath` where the exception is occurring? It sounds like maybe there is a different line that throws the exception, if that's the case, can you post the line that actually throws the exception. – CodingGorilla Jul 28 '11 at 15:18
  • Almost all cases of `NullReferenceException` are the same. Please see "[What is a NullReferenceException in .NET?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)" for some hints. – John Saunders Oct 13 '13 at 02:57

5 Answers5

80

Don't use Server.MapPath. It's slow. Use this instead, HttpRuntime.AppDomainAppPath. As long as your web site is running, this property is always available to you.

Then use it like this:

string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
nickytonline
  • 6,747
  • 6
  • 40
  • 75
7

if the code is not running from within a thread is executing a httprequest then HttpContext.Current is null (for example when you method is called via BeginInvoke) - see http://forums.asp.net/t/1131004.aspx/1 .

You can always use HttpRuntime see http://msdn.microsoft.com/en-us/library/system.web.httpruntime.aspx

Yahia
  • 67,016
  • 7
  • 102
  • 131
5

If there is no HttpContext (e.g. when the method is called via BeginInvoke, as Yahia pointed out), the call to HttpContext.Current.Server.MapPath() must fail. For those scenarios, there's HostingEnvironment.MapPath() in the System.Web.Hosting namespace.

string filePath = HostingEnvironment.MapPath("~/email/teste.html");
The Conspiracy
  • 2,225
  • 15
  • 17
0

Issue: I had an "Images" folder inside a class library project. But using the above answers, I was not able to get the physical path of the folder to read/write the files inside that folder.

Solution: The below code worked for me to get a physical path in the class library project.

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

I hope, it will help someone who is facing the same issue as me.

Rajeev Kumar
  • 312
  • 2
  • 9
0

You can use something like the following piece of code. One thing to note is that I was facing an issue, where I was trying to access a .txt file from within a TestMethod and everything was failing except for this...and yeah it works for non-Unit Test Scenarios too.

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

Gurunath Rao
  • 85
  • 1
  • 7