Невозможно использовать Server.MapPath


111

Что мне нужно сделать, чтобы заставить Server.MapPathработать?
у меня естьusing System.Web;

что еще? Когда я печатаю, Serverнет опции быстрого результата (intelli-sense) для Server.

Любая помощь?


1
Вам необходимо предоставить дополнительную информацию. Что это за проект? Почему вы хотите запустить Server.MapPath? Это проект веб-форм, и вы пишете код в подклассе страницы или в функции рендеринга ASPX?
Дай

C # Winforms .. я хочу, чтобы он проверял наличие файлов на сервере
a1204773

Ответы:


286

вы можете попробовать использовать это

    System.Web.HttpContext.Current.Server.MapPath(path);

или используйте HostingEnvironment.MapPath

    System.Web.Hosting.HostingEnvironment.MapPath(path);

1
Они не работают .... Ошибка 1 Тип или имя пространства имен «HttpContext» не существует в пространстве имен «System.Web» (отсутствует ссылка на сборку?) ... Ошибка 2 Тип или имя пространства имен «Хостинг» не существует в пространстве имен System.Web
a1204773

похоже, вы используете winforms, возможно, вы захотите увидеть эту ссылку, а затем debugging.com/bug/18951
DotNetUser

4
У меня тоже HostingEnvironment.MapPath работал, и я использую его вне контроллера.
Люк

Прежде всего, ваш проект должен ссылаться на System.Web.dll, и он будет работать
ihebiheb

Как получить доступ к файлу, находящемуся в этом каталоге "~ / AppData / Roaming"?
Murlidhar Fichadia

14

Ваш проект должен ссылаться на сборку System.Web.dll. Сервер - это объект типа HttpServerUtility. Пример:

HttpContext.Current.Server.MapPath(path);

3
Не могу найти такую ​​ссылку. Я нашел только эти две: System.Web.ApplicationServices, System.Web.Services ....
a1204773

4

System.Web.HttpContext.Current.Server.MapPath("~/") дает значение null, если мы вызываем его из потока.

Итак, попробуйте использовать

System.Web.Hosting.HostingEnvironment.MapPath("~/")


1

Сначала добавьте ссылку System.web, если у вас ее нет. Сделайте это в папке « Ссылки ».

Затем вы можете использовать Hosting.HostingEnvironment.MapPath(path);


1
bool IsExist = System.IO.Directory.Exists(HttpContext.Current.Server.MapPath("/UploadedFiles/"));
if (!IsExist)
    System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("/UploadedFiles/"));

StreamWriter textWriter = File.CreateText(Path.Combine(HttpContext.Current.Server.MapPath("/UploadedFiles/") + "FileName.csv"));
var csvWriter = new CsvWriter(textWriter, System.Globalization.CultureInfo.CurrentCulture);
csvWriter.WriteRecords(classVM);

Ответы, состоящие только из кода, считаются низкокачественными: обязательно объясните, что делает ваш код и как он решает проблему. Если вы добавите дополнительную информацию в свой пост, это поможет как спрашивающему, так и будущим читателям. См. « Объяснение ответов на основе кода»
Калос,



0

Я знаю, что этому посту несколько лет, но я добавляю эту строку в начало вашего класса, и вы все равно сможете использовать Server.MapPath.

Dim Server = HttpContext.Current.Server

или ты можешь сделать функцию

Public Function MapPath(sPath as String)
    return HttpContext.Current.Server.MapPath(sPath)
End Function

Я стремлюсь облегчить жизнь. Я также добавил его в свой класс Utilities на случай, если снова столкнусь с этим.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.