Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest对象的相对文件路径_C#_Path_Httpwebrequest - Fatal编程技术网

C# HttpWebRequest对象的相对文件路径

C# HttpWebRequest对象的相对文件路径,c#,path,httpwebrequest,C#,Path,Httpwebrequest,我正在尝试创建可以在我的开发团队中共享的单元测试,因此我需要使项目中的所有路径都是相对的 这给我带来麻烦的是HttpWebRequest类。 我希望它能够从本地文件系统中的一个文件中提供静态测试数据 我想这样做: file:///./TestData/test.html 但这只会产生C:\TestData\test.html和DirectoryNotFoundException HttpWebRequest的代码如下所示: var request = HttpWebRequest.Create

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

这给我带来麻烦的是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语法的情况下解析相对路径


与您的项目中的任何程序集相比,您尝试为服务器提供的文件是否具有相对路径?如果是这样,那么您可以基于其中一个程序集的路径构建一个非相对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,从而根据这个脆弱的目录生成一个解决方案。更改程序集的路径非常困难/不可能。