Microsoft Web API: Jak zrobić serwer.MapPath?

Ponieważ Microsoft Web API nie jest MVC , nie można zrobić czegoś takiego:

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

Ani to

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

Ponieważ są one w przestrzeni nazw System.Web, a nie System.Web.Http.

Jak więc ustalić względną ścieżkę serwera w Web API?{[19] } kiedyś robiłem coś takiego w MVC :

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

Co dałoby mi absolutną ścieżkę na dysku:

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
Author: Frederik Struck-Schøning, 2013-05-15

5 answers

Możesz użyć Hostingśrodowisko.MapPath w dowolnym kontekście, gdzie System.Web obiekty takie jak HttpContext.Current nie są dostępne (np. również z metody statycznej).

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

Zobacz także Jaka jest różnica między serwerem.MapPath i hosting environment.MapPath?

 394
Author: StuartLC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 01:08:05
string root = HttpContext.Current.Server.MapPath("~/App_Data");
 11
Author: ArgeKumandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 01:08:51

Nie mogę stwierdzić z kontekstu, który podajesz, ale jeśli jest to coś, co musisz zrobić przy starcie aplikacji, możesz nadal używać Server.MapPath w WebApiHttpApplication; np. w Application_Start().

Właśnie odpowiadam na twoje bezpośrednie pytanie; wspomniane już {[3] } jest prawdopodobnie preferowanym rozwiązaniem.
 1
Author: sellotape,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-15 13:17:56

Na marginesie tych, którzy potykają się o to, jednym z miłych sposobów uruchomienia poziomu testowego przy użyciu wywołania HostingEnvironment jest, jeśli dostęp do say a UNC share: \ example\, który jest mapowany do ~ / example/, możesz wykonać to, aby ominąć 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 jest to pomocne w przypadku, gdy masz prawa do lokalnego testowania na pliku, ale potrzebujesz mapowania env raz w produkcji.

 1
Author: Nathan Teague,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 01:08:39

Wybrana odpowiedź nie działała w mojej aplikacji Web API. Musiałem użyć

System.Web.HttpRuntime.AppDomainAppPath
 -1
Author: Zoomzoom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-20 23:56:10