Веб-интерфейс Microsoft: как вы работаете с Server.MapPath?

Поскольку Microsoft Web API не MVC, вы не можете сделать что-то вроде этого:

var a = Request.MapPath("~");

ни это

var b = Server.MapPath("~");

потому что они находятся в System.Web имен System.Web, а не в System.Web.Http имен System.Web.Http.

Так как же определить относительный путь к серверу в Web API?
Я делал что-то подобное в MVC:

var myFile = Request.MapPath("~/Content/pics/" + filename);

Который дал бы мне абсолютный путь на диске:

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"

Ответ 2

string root = HttpContext.Current.Server.MapPath("~/App_Data");

Ответ 3

В дополнение к тем, кто сталкивается с этим, один хороший способ запустить тестовый уровень при использовании вызова HostingEnvironment, если при доступе, скажем, к общему ресурсу UNC:\example \, который сопоставлен с ~/example/, вы можете выполнить это, чтобы обойти Вопросы 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

Я считаю, что это полезно, если у вас есть права на локальное тестирование файла, но вам нужно сопоставление env после запуска.

Ответ 4

Я не могу сказать из контекста, который вы поставляете, но если вам что-то нужно сделать при запуске приложения, вы все равно можете использовать Server.MapPath в WebApiHttpApplication; например в Application_Start().

Я просто отвечаю на ваш прямой вопрос; возможно, предпочтительным решением является уже упомянутое HostingEnvironment.MapPath().

Ответ 5

Поскольку Server.MapPath() не существует в Web Api (Soap или REST), вам необходимо обозначить local- относительно домашнего каталога веб-сервера context-. Самый простой способ сделать это с помощью:

string AppContext.BaseDirectory { get;}

Затем вы можете использовать это для объединения строки пути для сопоставления относительного пути с любым файлом.
ПРИМЕЧАНИЕ: пути к строкам \ а не / как в mvc.

Пример:

System.IO.File.Exists($"{**AppContext.BaseDirectory**}\\\\Content\\\\pics\\\\{filename}");

возвращает true-, утверждая, что это звуковой путь в вашем примере

Ответ 6

Выбранный ответ не работает в моем приложении веб-API. Мне пришлось использовать

System.Web.HttpRuntime.AppDomainAppPath

Ответ 7

Вы можете попробовать как:

var path = "~/Image/test.png"; System.Web.Hosting.HostingEnvironment.MapPath(@+ путь)