【问题标题】:Relative filepath with HttpWebRequest object具有 HttpWebRequest 对象的相对文件路径
【发布时间】:2009-02-03 14:38:29
【问题描述】:

我正在尝试创建可以在我的开发团队之间共享的单元测试,因此我需要让项目中的所有路径都是相对的。

这给我带来麻烦的是 HttpWebRequest 类。 我希望它从本地文件系统中的文件中提供静态测试数据。

我想做这样的事情:

file:///./TestData/test.html

但这只会产生 C:\TestData\test.html 和 DirectoryNotFoundException。

HttpWebRequest 的代码如下所示:

var request = HttpWebRequest.Create(uri);
var response = request.GetResponse();
var responseStream = new StreamReader(response.GetResponseStream());
return responseStream.ReadToEnd();

如何说服 C# 在不破坏 Uri 语法的情况下解析相对路径?

问候丹尼尔

【问题讨论】:

    标签: c# path httpwebrequest


    【解决方案1】:

    与项目中的任何程序集相比,您尝试服务器的文件是否具有相对路径?如果是这样,那么您可以基于其中一个程序集的路径构建一个非相对 URL,并将其返回给调用者。

    例如:

    var basePath = Path.GetDirectoryName(typeof(MyType).Assembly.Location);
    var fullPath = Path.Combine(basePath, @"TestData\test.html");
    return new Uri(fullPath);
    

    【讨论】:

    • 为什么要使用 typeof(MyType).Assembly.Location 而不是 Environment.CurrentDirectory?
    • @Daniel,程序很容易改变 Environment.CurrentDirectory 并因此根据该脆弱性制定解决方案。更改程序集的路径非常困难/不可能。
    【解决方案2】:

    如果网络请求在文件系统上,为什么还需要它?你可以用 File.ReadAllText(path) 打开它

    【讨论】:

    • 最终的生产系统将从远程服务器查询数据。在特殊测试期间,我想像远程服务器一样提供本地文件。
    • 是的,但这个方法所做的只是将 HTML 作为字符串返回,因此出于测试目的 File.ReadAllText 应该足以满足 IMO
    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多