Каков наиболее эффективный способ выполнить обратную версию Server.MapPath в приложении ASP.Net
Я создаю приложение MVC, в котором я читаю список файлов из файловой системы, и я хочу передать относительный URL-адрес этому файлу в представление, предпочтительно с префиксом "~/", чтобы любой вид был выбран Кабина отображает URL-адрес соответствующим образом.
Для этого мне нужно перечислить файлы в файловой системе и преобразовать их физические пути обратно в относительные URL-адреса. Есть несколько алгоритмов, с которыми я экспериментировал, но меня беспокоят эффективность и минимальные операции с строкой. Кроме того, я считаю, что в .NET Framework, который может выполнять эту операцию, ничего нет, но есть ли что-то в последней версии MVC, которая может?
Ответы
Ответ 1
В настоящий момент я не знаю встроенного метода для этого, но это не сложно, я делаю это вот так:
- Нам нужно получить корень приложения и заменить его на нашем новом пути
~
- Нам нужно преобразовать обратную косую черту косыми чертами
public string ReverseMapPath(string path)
{
string appPath = HttpContext.Current.Server.MapPath("~");
string res = string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
return res;
}
Ответ 2
Разве это не то, что делает метод UrlHelper.Content? http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.content.aspx
Ответ 3
Я немного поработал, пытаясь заставить класс UrlHelper работать вне контроллера, затем я вспомнил старый трюк, который сделал то же самое на странице aspx:
string ResolveUrl(string pathWithTilde)
Надеюсь, это поможет!
Видеть:
https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl(v=vs.110).aspx