httpcontext.current.server.mappath Ссылка на объект не указывает на экземпляр объекта

Я использую следующий код внутри класса:

string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");

Файл teste.html находится в папке

Но когда он открывает файл, генерируется следующая ошибка:

В экземпляре объекта не задана ссылка на объект.


person soamazing    schedule 28.07.2011    source источник
comment
При вызове MapPath возникает исключение? Похоже, может быть, есть другая строка, которая выдает исключение, если это так, можете ли вы опубликовать строку, которая на самом деле выдает исключение.   -  person CodingGorilla    schedule 28.07.2011
comment
Почти все случаи NullReferenceException одинаковы. Дополнительные подсказки см. в разделе Что такое NullReferenceException в .NET?.   -  person John Saunders    schedule 13.10.2013


Ответы (5)


Не используйте Server.MapPath. Это медленно. Используйте это вместо этого, HttpRuntime.AppDomainAppPath. Пока ваш веб-сайт работает, это свойство всегда доступно для вас.

Затем используйте его следующим образом:

string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
person nickytonline    schedule 28.07.2011
comment
Получение ошибки: невызываемый член «System.Web.HttpRuntime.AppDomainAppPath» не может использоваться как метод. при использовании в библиотеке классов. - person Jitendra Pancholi; 08.04.2014
comment
Jitendra, HttpRuntime.AppDomainAppPath — это свойство, а не метод. С уважением, Ник - person nickytonline; 08.04.2014
comment
ой!! это действительно здорово сработало, наконец, после долгого времени - person Cherry; 23.07.2014
comment
@ user12345, рад, что помог. - person nickytonline; 23.07.2014
comment
будет ли это работать, когда я разверну свой код на сервере? @nickytonline - person thiru; 07.12.2016
comment
@thiru, да, будет. - person nickytonline; 26.03.2018
comment
Это также не будет работать с относительными путями, такими как ../images/ - person AaA; 26.07.2018
comment
Так что мне действительно нужно сделать то же самое... но из модульного теста. Можете ли вы предложить что-нибудь! - person Gurunath Rao; 25.06.2020

если код не запускается из потока, выполняется httprequest, тогда HttpContext.Current является null (например, когда ваш метод вызывается через BeginInvoke) - см. http://forums.asp.net/t/1131004.aspx/1 .

Вы всегда можете использовать HttpRuntime, см. http://msdn.microsoft.com/en-us/library/system.web.httpruntime.aspx

person Yahia    schedule 28.07.2011

Если нет HttpContext (например, когда метод вызывается через BeginInvoke, как указал Яхья), вызов HttpContext.Current.Server.MapPath() должен завершиться ошибкой. Для таких сценариев в пространстве имен System.Web.Hosting есть HostingEnvironment.MapPath().

string filePath = HostingEnvironment.MapPath("~/email/teste.html");
person The Conspiracy    schedule 11.03.2016
comment
Это не обрабатывает относительные пути, такие как ../images/ - person AaA; 26.07.2018

Проблема: у меня была папка «Изображения» внутри проекта библиотеки классов. Но, используя приведенные выше ответы, я не смог получить физический путь к папке для чтения/записи файлов внутри этой папки.

Решение. Приведенный ниже код помог мне получить физический путь в проекте библиотеки классов.

string physicalPath = System.IO.Path.GetFullPath("..\\..\\Images");

Надеюсь, это поможет тому, кто сталкивается с той же проблемой, что и я.

person Rajeev Kumar    schedule 03.02.2020

Вы можете использовать что-то вроде следующего фрагмента кода. Следует отметить, что я столкнулся с проблемой, когда я пытался получить доступ к файлу .txt из TestMethod, и все терпело неудачу, кроме этого... и да, это работает и для сценариев, отличных от модульных тестов.

string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..") + "\\email\\teste.html";

person Gurunath Rao    schedule 26.06.2020