How to do it?
I don't want to use this:
HttpContext.Current.Server.MapPath
Is there a similar function that I can call without requiring a httpcontext?
For example if a start a thread doing some stuff i cant use the httpcontext, but i still need to get the path of the app. And no i can't pass the context as an argument or read it from a shared var.
There are several options:
HttpRuntime.AppDomainAppPath
AppDomain.CurrentDomain.BaseDirectory
HostingEnvironment.ApplicationPhysicalPath
I would recommend to use AppDomain.CurrentDomain.BaseDirectory, because it can be used in any type of project and it can be set up.
You can for example set UnitTest BaseDirectory to point your web root folder the AppDomain.CurrentDomain.BaseDirectory by command:
Use the
HttpRuntime.AppDomainAppPath
property.I have run across this question when looking for way to compute an URL (permalinks in the Web application) to provide in some e-mail notifications.
These were generated on another thread, so
HttpContext
was not available and I wanted to avoid putting URL related information in the queue table used to generate the e-mails.The code:
The function returns the full virtual path like:
http://full-host-name/AppName
. Of course, there are some limitations: hardcoded protocol (http
, https etc.) and usinghostname
instead ofdomain name
(fails if multiple domains are defined on a single machine).