ASP.net中的路径问题

时间:2010-04-17 12:33:33

标签: c# asp.net

我正在尝试执行以下操作 我用c#语言构建asp.net网站 我想从我的项目中读取一个文本文件(该文件在项目中) 我试图通过这种方式获取文件路径:

string path=Request.PhysicalApplicationPath+"filename.txt";

但我不能使用分离的C#文件中的“Request”对象? 注意:分开的C3文件,我的意思是它与aspx文件无关 你可以用我的方式帮助我,还是你有另一种方式? THX

4 个答案:

答案 0 :(得分:2)

我建议您从Web应用程序将路径传递到库中。例如,在您的网络应用中:

var path = Server.MapPath("~/filename.txt");
var result = BusinessLayer.SomeMethod(path);

你也可以在你的类库中使用HostingEnvironment,但我真的建议你反对它,因为它创建了一个与System.Web的依赖关系,这使你的类库与web上下文绑定,而不是单元可测试的友好:

var path = Path.Combine(
    HostingEnvironment.ApplicationPhysicalPath, 
    "filename.txt"
);

答案 1 :(得分:1)

使用HttpContext.Current,您可以访问HTTP请求的请求,服务器,响应和其他对象。

答案 2 :(得分:1)

  

但我不能使用分离的C#文件中的“Request”对象??

我猜你的意思是这是一个dll? 如果是这样,那么您可以通过在单独的dll中引用system.web并获取httpcontext.current对象来获取它

答案 3 :(得分:0)

我会使用某种注入机制将应用程序的根路径提供给类,或者将当前上下文/请求的副本提供给它可以使用的类。从本质上讲,您希望为类提供查找路径的方法(或者甚至为其提供路径),而不是使用在测试中难以重新创建的固定依赖项。为了简化我的示例,我将使用您正在执行的请求,但是,您也可以轻松地将应用程序的基本路径作为字符串提供。

public class Foo
{
     // HttpRequestBase may be more appropriate
     private HttpRequest Request { get; set; }

     public Foo( HttpRequest request )
     {
         this.Request = request;
     }

     public void Bar()
     {
          string path = Path.Combine( this.Request.PhysicalApplicationPath,
                                      "filename.txt" );
          ...
     }
}

请注意,您可以将此与@ Darin关于如何计算服务器路径的想法结合起来。