Использование Сервера.MapPath во внешних классах C# в ASP.NET



Я пытаюсь получить абсолютный путь к определенным файлам в классе C#. Server.MapPath отлично работает, конечно, для ASPX и их кодовых страниц, но это не существует в другом файле класса. Я пытался HostingEnvironment.MapPath(), но жалуется, что относительный виртуальный путь не допускается. Есть мысли?



System.Web уже импортированы.

754   9  

9 ответов:

The ServerUtility класс доступен как экземпляр в своем HttpContext. Если вы находитесь в среде, где вы знаете, что он будет выполнен внутри ASP.Net трубопровод, вы можете использовать

HttpContext.Current.Server.MapPath()

вам придется импортировать System.Web хотя.

вы также можете использовать:

var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")

Если

var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");

недоступен

вы не можете просто добавить ссылку System.Web и тогда вы можете использовать Server.MapPath ?

Edit: в настоящее время я бы рекомендовал использовать HostingEnvironment.MapPath метод:

это статический метод в System.Web сборка, которая сопоставляет виртуальный путь с физическим путем на сервере. Это не требуют HttpContext.

System.Reflection.Assembly.GetAssembly(type).Location

Если файл, который вы пытаетесь получить, является местом сборки для типа. Но если файлы относятся к местоположению сборки, то вы можете использовать это с System.IO пространства имен, чтобы получить точный путь к файлу.

Я тоже это использую:

System.Web.HTTPContext.Current.Server.MapPath
class test
{
public static void useServerPath(string path)
{
   if (File.Exists(path)
{
 \...... do whatever you wabt
}
else
{
\.....
}
}

теперь, когда вы вызываете метод из codebehind

например :

protected void BtAtualizacao_Click(object sender, EventArgs e)
        {
             string path = Server.MapPath("Folder") + "\anifile.txt";

            test.useServerPath(path);
}

таким образом, ваш код прост и с одним методом u может использовать несколько путей для каждого вызова :)

это помогло мне

//System.Web.HttpContext.Current.Server.MapPath //        
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

работаете ли вы в контексте ASP.NET или нет, вы должны быть в состоянии использовать HostingEnvironment.ApplicationPhysicalPath

сервер.mappath ("") будет работать на странице aspx,если вы хотите получить абсолютный путь из файла класса, который вы должны использовать-

HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")

Comments

    Ничего не найдено.