Da die Microsoft Web API keine MVC ist , können Sie Folgendes nicht tun:
var a = Request.MapPath("~");
noch das
var b = Server.MapPath("~");
weil sich diese unter dem System.Web
Namespace befinden, nicht unter dem System.Web.Http
Namespace.
Wie ermitteln Sie den relativen Serverpfad in der Web-API ?
Ich habe so etwas in MVC gemacht :
var myFile = Request.MapPath("~/Content/pics/" + filename);
Welches würde mir den absoluten Pfad auf der Festplatte geben:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
asp.net-web-api
Zachary Scott
quelle
quelle
IPathMapper
(Sie werden dies wahrscheinlich mit einer Reihe anderer Bedenken in eine größere Toolbelt / Utility-Oberfläche zusammenfassen). mit der Methodestring MapPath(string virtualPath)
. Nur die konkrete Implementierung für IhreWebApi IPathMapper
Bedürfnisse muss bekannt seinSystem.Web.Hosting.HostingEnvironment
../images/
quelle
Abgesehen von denjenigen, die darüber stolpern, besteht eine gute Möglichkeit, die Testebene bei Verwendung des HostingEnvironment-Aufrufs auszuführen, darin, beispielsweise auf eine UNC-Freigabe zuzugreifen: \ example \, die ~ / example / zugeordnet ist. Sie können dies ausführen, um herumzukommen IIS-Express-Probleme:
Ich finde das hilfreich, wenn Sie Rechte zum lokalen Testen einer Datei haben, aber die env-Zuordnung einmal in der Produktion benötigen.
quelle
HostingEnvironment
Klasse befindet sich imSystem.Web.Hosting
Namespace.HostingEnvironment
DNX Core 5.0?Ich kann nicht aus dem Zusammenhang sagen Sie liefern, aber wenn es etwas , das Sie nur bei App Startup tun müssen, können Sie verwenden ,
Server.MapPath
inWebApiHttpApplication
; zB inApplication_Start()
.Ich beantworte nur Ihre direkte Frage. Das bereits erwähnte
HostingEnvironment.MapPath()
ist wahrscheinlich die bevorzugte Lösung.quelle
Da
Server.MapPath()
es in einer Web-API (Soap oder REST) nicht vorhanden ist, müssen Sie das lokale Verhältnis zum Kontext-Home-Verzeichnis des Webservers angeben. Der einfachste Weg, dies zu tun, ist mit:Sie können dies dann verwenden, um eine Pfadzeichenfolge zu verketten und den relativen Pfad einer beliebigen Datei zuzuordnen.
HINWEIS: Zeichenfolgenpfade sind
\
und nicht/
wie in MVC.Ex:
gibt true zurück und setzt voraus, dass dies in Ihrem Beispiel ein Soundpfad ist
quelle
Die ausgewählte Antwort funktionierte in meiner Web-API-Anwendung nicht. Ich musste benutzen
quelle
~\folder
oder../images/
in physische Pfade übersetzenSie können versuchen wie:
var path = "~ / Image / test.png"; System.Web.Hosting.HostingEnvironment.MapPath (@ + Pfad)
quelle