Microsoft Web API: jak zrobić serwer.MapPath?

Microsoft Web APIMVC nie można zrobić coś takiego:

var a = Request.MapPath("~");

a

var b = Server.MapPath("~");

dlatego, że są pod System.Web przestrzeń nazw, a nie System.Web.Http przestrzeń nazw.

tak Więc, jak można określić ścieżkę względną serwera Web API ?
Ja robiłem coś takiego w MVC:

var myFile = Request.MapPath("~/Content/pics/" + filename);

który dał by mi bezwzględną ścieżkę na dysk:

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"

można użyć HostingEnvironment.MapPath w każdym kontekście, w którym System.Web obiekty typu HttpContext.Current i pokoju (e.g również z metody statycznej).

var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");

zobacz też na czym polega różnica między serwerem.MapPath i HostingEnvironment.MapPath?


string root = HttpContext.Current.Server.MapPath("~/App_Data");

nie mogę powiedzieć, z kontekstu państwu ofertę, ale jeśli to jest to, co musisz zrobić po uruchomieniu aplikacji, można nadal korzystać z Server.MapPathWebApiHttpApplication na przykład:Application_Start().

Ja po prostu odpowiadam na twoje proste pytanie; już wspomniana HostingEnvironment.MapPath() prawdopodobnie jest preferowanym rozwiązaniem.


z dala od tych, którzy potyka się na to, jeden dobry sposób, aby uruchomić testowy poziom przy użyciu połączenia HostingEnvironment - to dostęp do udziału UNC: \example\, która koreluje z ~ / example/, można wykonać to, aby obejść problemy IIS Express:

#if DEBUG
    var fs = new FileStream(@"\example\file",FileMode.Open, FileAccess.Read);
#else
    var fs = new FileStream(HostingEnvironment.MapPath("~/example/file"), FileMode.Open, FileAccess.Read);
#endif

uważam, że to przydatne, jeśli masz uprawnienia na lokalne testowanie pliku, ale trzeba mapowanie env raz w produkcji.


wybraną odpowiedź nie pracował w mojej aplikacji Web API. Musiałem użyć

System.Web.HttpRuntime.AppDomainAppPath