Абсолютный путь обратно к веб-относительный путь

голоса
58

Если мне удалось найти и проверить существование файла с помощью Server.MapPath и теперь я хочу , чтобы отправить пользователю непосредственно в этот файл, что является самым быстрым способом преобразовать этот абсолютный путь обратно в относительный веб - путь?

Задан 06/08/2008 в 09:34
источник пользователем
На других языках...                            


5 ответов

голоса
49

Возможно, это может работать:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);

Я использую C #, но может быть адаптирована к Vb.

Ответил 06/08/2008 в 10:28
источник пользователем

голоса
34

Не было бы неплохо иметь Server.RelativePath (путь) ?

хорошо, вам просто нужно расширить его ;-)

public static class ExtensionMethods
{
    public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
    {
        return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
    }
}

При этом вы можете просто позвонить

Server.RelativePath(path, Request);
Ответил 07/03/2011 в 18:27
источник пользователем

голоса
12

Я знаю, что это старое, но мне нужно учитывать виртуальные каталоги (на @ комментарии Кост в). Это, кажется, чтобы помочь:

static string RelativeFromAbsolutePath(string path)
{
    if(HttpContext.Current != null)
    {
        var request = HttpContext.Current.Request;
        var applicationPath = request.PhysicalApplicationPath;
        var virtualDir = request.ApplicationPath;
        virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
        return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
    }

    throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}
Ответил 05/05/2012 в 15:05
источник пользователем

голоса
4

Мне нравится идея с Каноас. К сожалению, у меня не было «HttpContext.Current.Request» (доступные BundleConfig.cs).

Я изменил Methode как это:

public static string RelativePath(this HttpServerUtility srv, string path)
{
     return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
Ответил 24/06/2015 в 08:19
источник пользователем

голоса
2

Если вы использовали Server.MapPath, то вы должны уже иметь относительный веб - путь. Согласно документации MSDN , этот метод принимает один переменную, путь , который представляет собой виртуальный путь веб - сервера. Так что, если вы были в состоянии вызвать метод, вы должны уже иметь непосредственный доступ относительный веб - путь.

Ответил 06/08/2008 в 09:44
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more