2009-02-03 8 views
0

Я пытаюсь создать unittests, которые могут использоваться совместно с моей командой разработчиков, поэтому мне нужно, чтобы все пути в проекте были относительными.Относительный путь к файлу с объектом HttpWebRequest

Если это дает мне проблемы с классом HttpWebRequest. Я хочу, чтобы он служил статическим testdata из файла в локальной файловой системе.

Я хотел бы сделать что-то вроде этого:

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?

привет Daniel

ответ

1

ли файл, который вы пытаетесь сервер имеет относительный путь по сравнению с любым из узлов в вашем проекте? Если это так, вы можете создать не относительный URL-адрес на основе пути одной из сборок и вернуть его вызывающему.

Для примера:

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

Зачем вам использовать typeof (MyType) .Assembly.Location вместо Environment.CurrentDirectory? –

+0

@ Daniel, очень легко для программы изменить Environment.CurrentDirectory и таким образом сделать решение в зависимости от этого хрупкого. Очень сложно/невозможно изменить путь сборки. – JaredPar

-1

Почему вам нужен WebRequest, если он находится на файловой системе? вы можете просто открыть его с помощью File.ReadAllText (path)

+0

Конечная производственная система будет запрашивать данные с удаленного сервера. Во время специальных тестов я хочу обслуживать локальные файлы, действующие как удаленный сервер. – Tigraine

+0

да, но все, что делает этот метод, возвращает HTML как строку, поэтому для целей тестирования File.ReadAllText должен быть достаточно IMO – BFree

Смежные вопросы