繁体   English   中英

带有 BaseAddress 的 HttpClient 不起作用(生产 + 集成测试)?

[英]HttpClient with BaseAddress not working (production + integration test)?

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

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

    private static HttpClient GetHttpClient(bool isProductionServer)
    {
      if (isProductionServer)
      {
        return new HttpClient {BaseAddress = new Uri("http://localhost/myservice/")};
      }

      var appFactory = new WebApplicationFactory<Startup>();
      var testClient = appFactory.CreateClient();
      return testClient;
    }

正如为什么 HttpClient BaseAddress 不起作用? , 斜杠必须出现在BaseAddress的末尾,之后,斜杠不能出现在相对 URI 的开头。

但似乎从WebApplicationFactory创建的测试 HttpClient 具有相反的要求,即斜杠必须出现在相对 URI 的开头。 由于我从同一个地方获取相对 URI,这给我带来了问题。 我的测试从基础测试 class 获取 httpClient 实例,并且测试不应该关心它们是针对 IIS 还是 TestServer 执行的。 知道如何进行这项工作吗? 为 TestServer 创建 httpClient 时可能有一些设置?

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

    [Test]
    public async Task TestRequestOnTestServer()
    {
      // works only for: "/api/v1/ping", but not for "api/v1/ping" - I get 404 response
      string route = ApiRoutes.V1.Health.PingGet;
      var client = GetHttpClient(false);
      var response = await client.GetAsync(route);
      Assert.That(response.IsSuccessStatusCode);
    }
    [Test]
    public async Task TestRequestOnProductionServer()
    {
      // works only for: "api/v1/ping", but not for "/api/v1/ping" - I get 404 response
      string route = ApiRoutes.V1.Health.PingGet;
      var client = GetHttpClient(true);
      var response = await client.GetAsync(route);
      Assert.That(response.IsSuccessStatusCode);
    }

也许从WebApplicationFactory创建的 HttpClient 没有我认为的行为。 原来问题出在 Controller class 中,它具有[Route("[controller]")]属性,并且其中的 Ping 方法具有[Route(ApiRoutes.V1.Health.PingGet)]

在 IIS 中,ping 在"/api/v1/ping"处可用(不知道为什么),但是从 VisualStudio swagger 开始时显示实际端点是"/Health/api/v1/ping" (这是错误的)。

删除[Route("[controller]")]属性解决了问题,现在两个测试都通过了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM