Ponieważ Microsoft Web API nie jest MVC , nie można zrobić czegoś takiego:
var a = Request.MapPath("~");
ani to
var b = Server.MapPath("~");
ponieważ znajdują się one w obszarze System.Web
nazw, a nie w System.Web.Http
obszarze nazw.
Jak zatem ustalić względną ścieżkę serwera w interfejsie API sieci Web ?
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"
asp.net-web-api
Zachary Scott
źródło
źródło
IPathMapper
(Prawdopodobnie zwiniesz to z szeregiem innych problemów w większym interfejsie narzędzi / paska narzędzi) z tą metodąstring MapPath(string virtualPath)
. Tylko konkretne wdrożenieWebApi IPathMapper
, o którymSystem.Web.Hosting.HostingEnvironment
../images/
źródło
Oprócz tych, które się z tym spotykają, jednym fajnym sposobem na uruchomienie poziomu testowego przy użyciu wywołania HostingEnvironment jest dostęp do powiedzmy udziału UNC: \ example \, który jest zamapowany na ~ / example /, możesz to zrobić, aby obejść Problemy z IIS-Express:
Uważam to za pomocne, jeśli masz prawa do lokalnego testowania pliku, ale potrzebujesz mapowania env raz w produkcji.
źródło
HostingEnvironment
klasa znajduje się wSystem.Web.Hosting
przestrzeni nazw.HostingEnvironment
dla DNX core 5.0?Nie mogę powiedzieć z kontekstu przysłanych przez użytkownika, ale jeśli jest to coś po prostu trzeba zrobić przy uruchamianiu aplikacji, nadal można używać
Server.MapPath
wWebApiHttpApplication
; npApplication_Start()
. wOdpowiadam tylko na twoje bezpośrednie pytanie; wspomniane już
HostingEnvironment.MapPath()
jest prawdopodobnie preferowanym rozwiązaniem.źródło
Ponieważ
Server.MapPath()
nie istnieje w interfejsie WWW (Soap lub REST), musisz określić lokalny względem względnego katalogu domowego katalogu kontekstowego serwera WWW. Najłatwiej to zrobić za pomocą:Następnie można użyć tego do konkatenacji ciągu ścieżki w celu odwzorowania ścieżki względnej na dowolny plik.
UWAGA: ścieżki łańcuchowe są
\
i nie są/
tak, jak w mvc.Dawny:
zwraca true - zakładając, że jest to ścieżka dźwiękowa w twoim przykładzie
źródło
Wybrana odpowiedź nie działała w mojej aplikacji interfejsu API sieci Web. Musiałem użyć
źródło
~\folder
lub../images/
ścieżki fizyczneMożesz spróbować:
var path = "~ / Image / test.png"; System.Web.Hosting.HostingEnvironment.MapPath (ścieżka +)
źródło