C# 基址不工作的HttpClient(生产和集成测试)?

C# 基址不工作的HttpClient(生产和集成测试)?,c#,asp.net-core,integration-testing,dotnet-httpclient,C#,Asp.net Core,Integration Testing,Dotnet Httpclient,我有一个ASP.NET Core 5应用程序在IIS的生产环境中运行,我对该应用程序进行了集成测试。我有一个问题,我不知道如何在集成测试中设置我的HttpClient,以便与“生产”服务器(在本地IIS上运行的服务)和 这就是我实例化HttpClient的方式: 私有静态HttpClient GetHttpClient(bool-isProductionServer) { if(iProductionServer) { 返回新的HttpClient{BaseAddress=newURI(“htt

我有一个ASP.NET Core 5应用程序在IIS的生产环境中运行,我对该应用程序进行了集成测试。我有一个问题,我不知道如何在集成测试中设置我的HttpClient,以便与“生产”服务器(在本地IIS上运行的服务)和

这就是我实例化HttpClient的方式:

私有静态HttpClient GetHttpClient(bool-isProductionServer)
{
if(iProductionServer)
{
返回新的HttpClient{BaseAddress=newURI(“http://localhost/myservice/")};
}
var appFactory=new WebApplicationFactory();
var testClient=appFactory.CreateClient();
返回testClient;
}
如中所述,斜杠必须出现在
基地址的末尾,以后,斜杠不得出现在相对URI的开头

但从
WebApplicationFactory
创建的测试HttpClient似乎有相反的要求,即斜杠必须出现在相对URI的开头。由于我从同一个位置获取相对URI,这给我带来了问题。我的测试从一个基本测试类获取httpClient实例,这些测试不应该关心它们是针对IIS还是TestServer执行的。你知道怎么做吗?在为TestServer创建httpClient时可能需要一些设置

为了进一步说明问题,请查看以下两个测试:

[测试]
公共异步任务TestRequestOnTestServer()
{
//仅适用于:“/api/v1/ping”,但不适用于“api/v1/ping”-我得到404响应
字符串route=apirouts.V1.Health.PingGet;
var client=GetHttpClient(false);
var response=await client.GetAsync(路由);
Assert.That(response.issucessStatusCode);
}
[测试]
公共异步任务TestRequestOnProductionServer()
{
//仅适用于“api/v1/ping”,但不适用于“/api/v1/ping”-我得到404响应
字符串route=apirouts.V1.Health.PingGet;
var client=GetHttpClient(true);
var response=await client.GetAsync(路由);
Assert.That(response.issucessStatusCode);
}

也许从
WebApplicationFactory
创建的HttpClient没有我假设的行为。原来问题出在具有
[Route(“[Controller]”)属性的Controller类中,而其中的Ping方法具有
[Route(apirouts.V1.Health.PingGet)]

在IIS中,ping可在
“/api/v1/ping”
(不确定原因),但从VisualStudio开始时,swagger显示实际端点是
“/Health/api/v1/ping”
(这是错误的)


删除
[路由(“[控制器]”)
属性修复了问题,现在两个测试都通过了。

是否有从
appFactory.CreateClient
返回的自定义
HttpClient
?自定义客户端可能有一个自定义行为,该行为会改变它的工作方式。在创建
HttpClient
时,您有没有理由不使用
IHttpClientFactory
?@Robert如果您找到了自己问题的答案,请留下帖子并将其标记为答案。@PeterCsala:谢谢您的提示-已添加答案是@King King:使用了标准
HttpClient
,似乎问题出在控制器上@smoksnes:不确定在测试中使用
IHttpClientFactory
有什么好处。所描述的用例似乎都不适用于我的用例。