Я пытаюсь написать интеграционный тест для метода веб-API, который возвращает файл cookie. Основываясь на этом вопросе, я считаю, что мне нужно установить CookieContainer для HttpClientHandler.
HttpClient не сохраняет файлы cookie
Затем, исходя из этого вопроса, я думаю, мне нужно установить этот HttpClientHandler в качестве InnerHandler для моего экземпляра HttpServer, чтобы я мог связать обработчики.
Как выполнить тест HttpClientHandler в памяти
Проблема в том, что я все еще обнаруживаю, что CookieContainer пуст. У меня есть утверждение, которое проверяет наличие заголовка в ответе, который включает ожидаемый файл cookie. Вот мой код:
// Set up in-memory hosting of Web API
var config = new HttpConfiguration();
WebApiConfig.Register(config);
var cookieJar = new CookieContainer();
var httpClientHandler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true
};
var httpServer = new HttpServer(config)
{
InnerHandler = httpClientHandler
};
const string loginUrl = "http://localhost/api/authentication/login";
var uri = new Uri(loginUrl);
var client = new HttpClient(httpServer) { BaseAddress = uri };
var response =
client.PostAsJsonAsync(uri,
new LoginMessage {Email = UserEmail, Password = Password},
CancellationToken.None).Result;
response.EnsureSuccessStatusCode();
var data = response.Content.ReadAsAsync<LoginResponse>().Result;
Assert.IsTrue(response.Headers.Contains("Set-Cookie"));
Assert.AreNotEqual(0, httpClientHandler.CookieContainer.Count);
Последнее утверждение о количестве элементов в CookieContainer не работает. Я также попытался вызвать httpClientHandler.CookieContainer.GetCookies(uri)
, но полученная коллекция файлов cookie по-прежнему содержит ноль элементов.
Я также попытался явно связать свои клиентские обработчики, но не заметил разницы в поведении.
var cookieJar = new CookieContainer();
var httpClientHandler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true
};
var httpServer = new HttpServer(config);
var client = HttpClientFactory.Create(httpClientHandler, httpServer);
Может ли кто-нибудь сказать мне, что я делаю неправильно, пытаясь получить эти файлы cookie? Файл cookie, который я вижу в заголовке ответа, выглядит так:
Temp=E4C4947BAB708D089C636B4A5BDA094A10C8B1D66347EBD96629CB9BDB589822198A09BCBBE22C13D07AFC4D4C3C91E78C08BECFC9CC03BEE881858A1B4752EDC1BB1E604B819FBAFE34776B6F46B78ADCD2421F8125A395784981BFF22CEBE19DB228158E85B5786279E55D4114B72E50098B2374C23A43B7C89EBA30F771C54E1D98A6B1CD315D1FB8623E8E97E41FE4279479B49D0A948E2752CA09BD17FF7B52764E96EA43DB9E98D7CEBD8A73C9547A696C170CFC9B6F75CA23B881ED9675C2344A2A16BEF2DFD70DBA723FB62578E7779ECADCF11347B22199DAC8FA6A; expires=Thu, 22 May 2014 01:37:36 GMT; path=/