在 ASP.NET 中外部 C # 类中使用 Server.MapPath

我试图得到 C # 类中某些文件的绝对路径。当然,对于 ASPX 和它们的代码隐藏页面,Server.MapPath工作得很好,但是在其他类文件中不存在这种情况。我尝试了 HostingEnvironment.MapPath(),但它抱怨不允许使用相对虚拟路径。有什么想法吗?

System.Web已经导入。

255754 次浏览

ServerUtility类可以作为 HttpContext中的实例使用。如果您所处的环境知道它将在 ASP.Net 管道中执行,则可以使用

HttpContext.Current.Server.MapPath()

但是,您必须导入 System.Web

你不能只添加一个对 System.Web的引用,然后就可以使用 Server.MapPath了吗?

编辑: 现在我推荐使用 HostingEnvironment.MapPath方法:

它是 System.Web程序集中的静态方法,将虚拟路径映射到服务器上的物理路径。它 没有需要一个对 HttpContext的引用。

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

如果要获取的文件是类型的程序集位置,则为。但是如果文件相对于程序集位置,那么您可以使用 System.IO命名空间来获得文件的确切路径。

class test
{
public static void useServerPath(string path)
{
if (File.Exists(path)
{
\\...... do whatever you wabt
}
else
{
\\.....
}
}

现在,当您从代码隐藏调用该方法时

例如:

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


test.useServerPath(path);
}

通过这种方式,你的代码变得非常简单,并且通过一个方法,你可以为每个调用使用多个路径:)

我也用这个:

System.Web.HTTPContext.Current.Server.MapPath

你亦可使用:

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.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

Mappath (“”)将在 aspx 页面上工作,如果你想从类文件中得到绝对路径,你必须使用这个-

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