我正在尝试执行以下操作 我用c#语言构建asp.net网站 我想从我的项目中读取一个文本文件(该文件在项目中) 我试图通过这种方式获取文件路径:
string path=Request.PhysicalApplicationPath+"filename.txt";
但我不能使用分离的C#文件中的“Request”对象? 注意:分开的C3文件,我的意思是它与aspx文件无关 你可以用我的方式帮助我,还是你有另一种方式? THX
答案 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关于如何计算服务器路径的想法结合起来。