ASP.NET Core 3: ответ 404 во время интеграционного теста, созданного RedirectResult («MyList») - PullRequest
0 голосов
/ 07 октября 2019

У меня есть две страницы /MyArea/Pages/Create.cshtml и /MyArea/Pages/MyList.cshtml. Поэтому я создаю сущность и заканчиваю ее return RedirectResult("MyList").

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

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

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

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

{StatusCode: 404, ReasonPhrase: «Not Found», версия: 1.1, Content: 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 должен содержатьarea // localhost / MyArea / MyList,

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

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

1 Ответ

0 голосов
/ 07 октября 2019

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

...