Question: I am trying to read an XSLT file from disk in my ASP.Net MVC controller. What I am doing is the following:

```
string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);

```

However, [half way down this thread on forums.asp.net](http://forums.asp.net/t/1201036.aspx) there is the following quote

> 
> HttpContext.Current is evil and if you
>  use it anywhere in your mvc app you
>  are doing something wrong because you
>  do not need it.
> 
> 
> 

Whilst I am not using `Current`, I am wondering what is the best way to determine the absolute physical path of a file in MVC? For some reason (I don't know why!) `HttpContext` doesn't feel right for me. 

Is there a better (or recommended/best practice) way of reading files from disk in ASP.Net MVC?

Answer: 
If you're using WebApi or not specifically within a controller class, you can use the following as an alternative:

```
HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")

```
I would have the site root path injected into the controller constructor by the DI framework:

```
public class HomeController: Controller
{
    private readonly string _siteRoot;
    public HomeController(string siteRoot)
    {
        _siteRoot = siteRoot;
    }

    public ActionResult Index()
    {
        string filePath = Path.Combine(_siteRoot, @"Content\Xsl\pubmed.xslt");
        return File(filePath, "text/xml");
    }
}

```

As far as the site root path is concerned it can be expressed with the [HostingEnvironment.ApplicationPhysicalPath](http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.applicationphysicalpath(v=VS.100).aspx) static property.