繁体   English   中英

ASP.net中的路径问题

[英]Path Problem in ASP.net

我正在尝试执行以下操作我正在使用c#语言构建asp.net网站,我想从项目中读取文本文件(该文件位于项目内部),我试图通过这种方式获取文件Path:

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

但我不能使用单独的C#文件中的“请求”对象? 注意:分开的C3文件,我的意思是它与aspx文件不相关,您可以用我的方式还是以其他方式帮助我? 谢谢

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

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

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

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

使用HttpContext.Current可以访问HTTP请求的Request,Server,Response和其他对象。

但我不能使用单独的C#文件中的“请求”对象?

我猜你的意思是这在dll中? 如果是这样,则可以通过在单独的dll中引用system.web并获取httpcontext.current对象来进行访问。

我将使用某种注入机制,要么将应用程序的根路径提供给类,要么将当前上下文/请求的副本提供给它可以使用的类。 本质上,您想给类提供一种找到路径(甚至给它提供路径)的方法,而不是使用在测试中很难重新创建的固定依赖关系。 为了简化我的示例,我将在执行操作时使用Request,但是您也可以轻松地仅将应用程序的基本路径作为字符串提供。

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关于如何计算服务器路径的想法结合起来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM