Какой самый эффективный способ выполнить обратное Server.MapPath в приложении ASP.Net - PullRequest
25 голосов
/ 28 декабря 2008

Я создаю приложение MVC, в котором я читаю список файлов из файловой системы, и я хочу передать относительный URL-адрес этого файла в представление, предпочтительно с префиксом «~ /», чтобы любое представление было выбрано Cab отображает URL соответствующим образом.

Для этого мне нужно перечислить файлы в файловой системе и преобразовать их физические пути обратно в относительные URL-адреса. Есть несколько алгоритмов, с которыми я экспериментировал, но я обеспокоен эффективностью и минимальными строковыми операциями. Кроме того, я считаю, что в .Net Framework нет ничего, что могло бы выполнить эту операцию, но есть ли что-то в последней версии MVC, которая может?

Ответы [ 3 ]

24 голосов
/ 28 декабря 2008

На данный момент я не знаю ни одного встроенного метода для этого, но это не сложно, я делаю это так:

  • Нам нужно получить корень приложения и заменить его в нашем новом пути на ~
  • Нам нужно преобразовать обратную косую черту в косую черту

public string ReverseMapPath(string path)
{
    string appPath = HttpContext.Current.Server.MapPath("~");
    string res = string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
    return res;
}
0 голосов
/ 17 февраля 2015

Я немного покопался, пытаясь заставить класс UrlHelper работать вне контроллера, потом вспомнил старый трюк, который делал то же самое на странице aspx:

string ResolveUrl(string pathWithTilde)

Надеюсь, это поможет! Увидеть: https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl(v=vs.110).aspx

0 голосов
/ 18 апреля 2011

Разве это не то, что делает метод UrlHelper.Content? http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.content.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...