Сервер.mappath ведет себя по-разному в локальной машине и серверной машине?

StackOverflow https://stackoverflow.com/questions/3155383

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня был настоящий кошмар с Server.MapPath(). Отказ Когда я звоню Server.MapPath("~") В моем приложении, которое работает в сервере разработки ASP.NET, он возвращает корневой каталог, который заканчивается на задней слефе, как f:\projects\app1\, но я называю его в опубликованной версии, установленной в IIS, он возвращает Root Directory без какой-либо спины, как c:\inetpub\wwwroot\app1. Отказ Почему это происходит? Как избежать?

Я сделал 2 сценария на одной машине: Windows Server 2008 R2 X64, Visual Studio 2010 x64, IIS 7.

ОБНОВИТЬ:

Почему я забочусь об этом? Ведом я написал пользовательский поставщик карта сайта на основе структуры файла / папки. ИТ извлекивает список файлов / папок корневого каталога "~", заменяет раздел Root Directory с Server.MapPath("~") Для создания URL .aspx Файлы для использования в ASP.NET Menu контроль. Я думаю, что следующий код объясняет, что я делаю:

    string mainRoot = HttpContext.Current.Server.MapPath("~");

    DirectoryInfo di = new DirectoryInfo(mainRoot); 

    //added to solve this problem with Server.MapPath
    if (!mainRoot.EndsWith(@"\"))
        mainRoot += @"\";


    FileInfo[] files = di.GetFiles("*.aspx");
    foreach (FileInfo item in files)
    {
        string path = item.FullName.Replace(mainRoot, "~/").Replace(@"\", "/");

        //do more here
    }
Это было полезно?

Решение

Это может быть, когда вы настроили виртуальный каталог внутри IIS, в зависимости от того, использовали ли вы трейлинг, при настройке его.

Но действительно ли это имеет значение? Почему вы даже заботитесь о том, что Server.MapPath("~") возвращается? Я не могу себе представить, что вы когда-нибудь будете использовать это так. Гораздо более вероятно, когда вам действительно нужен путь к чему-то внутри ваше приложение:

Server.MapPath("~/Something/Foo.txt");

Кроме того, всякий раз, когда вы создаете пути, вы должны попытаться попасть в привычку использовать Path.combine., Потому что вам не нужно беспокоиться о том, чтобы вообще беспокоиться вообще:

string fullPath = Path.Combine(Server.MapPath("~"), @"Something\Foo.txt");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top