Kể từ Microsoft Web API không là MVC, bạn không thể làm một cái gì đó như thế này:Microsoft Web API: Bạn làm thế nào để thực hiện một Server.MapPath?
var a = Request.MapPath("~");
cũng không này
var b = Server.MapPath("~");
bởi vì đây là dưới namespace System.Web
, không phải là không gian tên System.Web.Http
.
Vậy làm cách nào để bạn tìm ra đường dẫn máy chủ tương đối trong API Web?
tôi sử dụng để làm một cái gì đó như thế này trong MVC:
var myFile = Request.MapPath("~/Content/pics/" + filename);
Trong đó sẽ cho tôi đường dẫn tuyệt đối trên đĩa:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
này là tốt đẹp, nhưng không có cách nào dễ dàng để thử HostingEnvironment vì nó là một ví dụ lớp tĩnh ... :-( –
Chắc chắn, nhưng trong điều khiển của bạn hoặc lớp logic khác mà bạn muốn thử nghiệm, bạn sẽ chỉ phụ thuộc vào sự trừu tượng của riêng bạn, như 'IPathMapper' (bạn có thể sẽ cuộn lên với một loạt các mối quan tâm khác vào một giao diện công cụ/tiện ích lớn hơn) với phương thức' string MapPath (string virtualPath) ' Chỉ việc triển khai thực hiện cụ thể cho 'WebApi IPathMapper' của bạn cần biết về' System.Web.Hosting.HostingEnvironment' – StuartLC
@JoshG - bạn có thể trừu tượng HostingEnvironment.MapPath thông qua Func GetWebPath = HostingEnvironment.MapPath và sau đó ghi đè lên GetWebPath tại thời điểm thử nghiệm với mô hình. –