我正在尝试访问使用以下代码托管的控制器的路由:
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");
工作正常,当我尝试使用WebClient访问它时,我会收到一个WebException,上面写着“无法建立连接,因为目标计算机主动拒绝了它”。
var webClient = new WebClient();
var response = webClient.DownloadString(url + "api/v1/test/validData");
我不确定设置url是否确实有效(这就是为什么我在配置中得到多个测试代码的原因),但是使用主机的baseaddress会返回相同的结果。
任何帮助将不胜感激。
答案 0 :(得分:1)
GetTestClient
返回一个HttpClient,该客户端使用special HttpMessageHandler
将请求直接分派到ASP.NET Core服务器管道中。这种专用代码避免了通过直接协调应用程序代码来通过网络发送实际数据的情况。
这允许进行有效的集成测试,以测试您正确设置的所有应用程序代码。但是,由于这将模拟网络流量而无需打开实际的套接字,因此您将无法将其用于与外部客户端进行的端到端测试。
因此,由于WebClient
不支持消息处理程序,因此您将无法将其用于集成测试。您将必须使用测试服务器为您提供的HttpClient
。