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"
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?
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");
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()
.
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.
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
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