Dal Microsoft Web API non è MVC, non si può fare qualcosa di simile:API Web Microsoft: come si esegue Server.MapPath?
var a = Request.MapPath("~");
né questo
var b = Server.MapPath("~");
perché questi sono sotto il System.Web
spazio dei nomi, non il System.Web.Http
namespace .
Quindi, come si determina il percorso del server relativo nell'API Web ?
ho usato per fare qualcosa di simile in MVC:
var myFile = Request.MapPath("~/Content/pics/" + filename);
Il che mi avrebbe dato il percorso assoluto sul disco:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
Questo è bello, ma non c'è modo semplice per deridere HostingEnvironment dal momento che è un'istanza di classe statica ... :-( –
Certo, ma nel tuo controller o altro livello di logica che si desidera test, si impiegherebbe solo una dipendenza dalla propria astrazione, come 'IPathMapper' (probabilmente lo si arrotolerà con una serie di altri problemi in una più grande interfaccia toolbelt/utility) con il metodo' stringa MapPath (string virtualPath) ' Solo l'implementazione concreta per il tuo 'WebApi IPathMapper' deve sapere su' System.Web.Hosting.HostingEnvironment' – StuartLC
@JoshG - puoi astrarre HostingEnvironment.MapPath tramite Func GetWebPath = HostingEnvironment.MapPath e quindi sovrascrivere GetWebPath al momento del test con una simulazione –