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

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

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

9 ответов


на 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")