C# HttpWebRequest对象的相对文件路径
我正在尝试创建可以在我的开发团队中共享的单元测试,因此我需要使项目中的所有路径都是相对的 这给我带来麻烦的是HttpWebRequest类。 我希望它能够从本地文件系统中的一个文件中提供静态测试数据 我想这样做:C# HttpWebRequest对象的相对文件路径,c#,path,httpwebrequest,C#,Path,Httpwebrequest,我正在尝试创建可以在我的开发团队中共享的单元测试,因此我需要使项目中的所有路径都是相对的 这给我带来麻烦的是HttpWebRequest类。 我希望它能够从本地文件系统中的一个文件中提供静态测试数据 我想这样做: file:///./TestData/test.html 但这只会产生C:\TestData\test.html和DirectoryNotFoundException HttpWebRequest的代码如下所示: var request = HttpWebRequest.Create
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语法的情况下解析相对路径
与您的项目中的任何程序集相比,您尝试为服务器提供的文件是否具有相对路径?如果是这样,那么您可以基于其中一个程序集的路径构建一个非相对URL,并将其返回给调用者 例如:
var basePath = Path.GetDirectoryName(typeof(MyType).Assembly.Location);
var fullPath = Path.Combine(basePath, @"TestData\test.html");
return new Uri(fullPath);
如果webrequest在文件系统上,为什么需要它?您可以使用File.ReadAllText(path)打开它。最终的生产系统将从远程服务器查询数据。在特殊测试期间,我希望像远程服务器一样为本地文件提供服务。是的,但此方法所做的只是将HTML作为字符串返回,以便进行测试。ReadAllText应该足够了。为什么要使用typeof(MyType).Assembly.Location而不是Environment.CurrentDirectory?@Daniel,一个程序很容易改变Environment.CurrentDirectory,从而根据这个脆弱的目录生成一个解决方案。更改程序集的路径非常困难/不可能。