ASP.NET Core 3: ответ 404 во время интеграционного теста, созданный RedirectResult (MyList)

У меня две страницы /MyArea/Pages/Create.cshtml и /MyArea/Pages/MyList.cshtml. Итак, я создаю объект и завершаю его с помощью return RedirectResult("MyList").

Это работает в браузере.

Но во время теста интеграции (с использованием пакета Microsoft.AspNetCore.Mvc.Testing версии 3.0), когда я открываю страницу /MyArea/Create и отправляю форму POST:

 var createConfirmHttpResponseMessage = await httpClient.SendAsync(postRequest1);
 Assert.IsTrue(createConfirmHttpResponseMessage.StatusCode == HttpStatusCode.OK);

Все это возвращается

{StatusCode: 404, ReasonPhrase: 'Not Found', версия: 1.1, содержимое: System.Net.Http.StreamContent, заголовки: {Content-Length: 0}}

Объект был создан, и return RedirectResult("MyList") был вызван

Сообщение с запросом отправлено: {Method: GET, RequestUri: 'http://localhost/MyList', Version: 1.1, Content: <null>, Headers: { Cookie: .AspNetCore.Antiforgery.... Cookie: .AspNetCore.Antiforgery....}}

Я вижу, что сообщение запроса неверно: RequestUri должен содержать область // localhost / MyArea / MyList,

Какого рода «управление текущим местоположением» я должен добавить в код интеграционного теста, чтобы заставить httpClient «уважать» эту область?

P.S. Я мог бы написать это так return RedirectResult("/MyArea/MyList") на стороне сервера, но теперь я хочу знать, как повторить поведение браузера в интеграционном тесте?


person Roman Pokrovskij    schedule 06.10.2019    source источник


Ответы (1)


Один из вариантов, который я нашел до сих пор, - это установить clientOptions.AllowAutoRedirect=false, а затем обрабатывать перенаправления вручную. Странно, что HttpClient не «уважает» текущее местоположение во время автоматического перенаправления. Похоже на ошибку HttpClient.

person Roman Pokrovskij    schedule 07.10.2019