Подтвердить что ты не робот

Каков наиболее эффективный способ выполнить обратную версию Server.MapPath в приложении ASP.Net

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

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

4b9b3361

Ответ 1

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

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

public string ReverseMapPath(string path)
{
    string appPath = HttpContext.Current.Server.MapPath("~");
    string res = string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
    return res;
}

Ответ 3

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

string ResolveUrl(string pathWithTilde)

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