Я пишу код, который вызывает веб-сервис, читает ответ и что-то делает с ним. Мой код выглядит номинально следующим образом:
string body = CreateHttpBody(regularExpression, strategy);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);
request.Method = "POST";
request.ContentType = "text/plain; charset=utf-8";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(Encoding.UTF8.GetBytes(body), 0, body.Length);
requestStream.Flush();
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
byte[] data = new byte[response.ContentLength];
using (Stream stream = response.GetResponseStream())
{
int bytesRead = 0;
while (bytesRead < data.Length)
{
bytesRead += stream.Read(data, bytesRead, data.Length - bytesRead);
}
}
return ExtractResponse(Encoding.UTF8.GetString(data));
}
Единственные части, в которых я фактически выполняю произвольные манипуляции, находятся в методах ExtractResponse
и CreateHttpBody
. Однако это не так просто unit test эти методы, и надеемся, что остальная часть кода будет собрана правильно. Можно ли каким-либо образом перехватить HTTP-запрос и подавать его вместо данных?
EDIT. Эта информация устарела. Гораздо проще построить такой код, используя библиотеки System.Net.Http.HttpClient.