Доступ к хосту WebHostBuilder с помощью WebClient отклоняется - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь получить доступ к маршруту контроллера, который размещен с использованием этого кода:

var configuration =
            new ConfigurationBuilder()
                .AddInMemoryCollection(new Dictionary<string, string>
                {
                    ["urls"] = url
                })
                .Build();

        var hostBuilder = new HostBuilder()
            .ConfigureWebHost(webHost =>
            {
                webHost.UseConfiguration(configuration);
                webHost.UseUrls(url);
                webHost.UseTestServer();
                webHost.UseStartup<TestStartup>();

            });

        var host = await hostBuilder.StartAsync();

При обращении к нему с помощью

 var client = host.GetTestClient();
 var response = await client.GetAsync("/api/test/testdata");

работает нормально, я получу WebException, говоря «Невозможно установить соединение, потому что целевая машина активно отказывала в этом», когда я пытаюсь получить к нему доступ с помощью WebClient

var webClient = new WebClient();
var response = webClient.DownloadString(url + "api/v1/test/validData");

Я не уверен, что настройка URL действительно работает (вот почему я получил несколько тестов код в конфигурации), но использование базового адреса хоста возвращает тот же результат.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 13 апреля 2020

GetTestClient возвращает HttpClient, который использует специальный HttpMessageHandler, который отправляет запрос непосредственно в конвейер основного сервера ASP. NET. Этот специализированный код предотвращает отправку фактических данных по сети, напрямую управляя кодом приложения.

Это позволяет проводить эффективные интеграционные тесты, которые проверят весь код приложения, настроенный правильно. Но поскольку это будет эмулировать сетевой трафик c без открытия реальных сокетов, вы не сможете использовать его для сквозных тестов с иностранными клиентами.

Так как WebClient не поддерживает обработчики сообщений , вы не сможете использовать его для интеграционных тестов. Вам придется использовать HttpClient, который дает вам тестовый сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...