1

希望我能在这里明白这一点..

我有 2 个工作流程:

  1. (测试成功)(c).NET WebAPI REST 端点 >(d)WebRequest 到 >(e)另一个 .NET WebAPI REST 端点 >(f)Delphi.NET 库
  2. (失败):(a)ASP.NET 5 Core REST 端点 >(b)HttpClient.SendAsync >(c)WebAPI REST 端点>(d)WebRequest 到 >(e)另一个 .NET WebAPI REST 端点 >(f)Delphi。 NET 库(调用底层 Delphi 方法时的块)

(2) 是目标状态。从 (c) 开始,它与 1) 完全相同。

  • 在 (2) 中,Fiddler 显示正确的 url/headers 在 (c) 处传递给 .WebAPI REST 端点 - 但在 ASP.NET Core 调用 (b) 超时之前它永远不会返回。

尝试过的事情(不详尽)

  • 在堆栈中一直添加 ConfigureAwait(false)
  • 重写 .NET Framework 代码以使用 HttpClient
  • 在调用 Delphi.NET 的代码中添加异步
  • 删除 HttpClient 调用中的异步
  • 在 Startup 中为最终端点添加 EnableCors
  • 尝试增加和减少超时(在客户端和服务器上)
  • ConsoleApp 简化流程

使用 HttpClient 的标准代码

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:xxxxx");
        client.DefaultRequestHeaders.Add("header1", "xxx");


        var uri = $"{client.BaseAddress}v1/CoreEndpoint";
        string jsonContent = JsonConvert.SerializeObject("{body}");

        var m = new HttpRequestMessage { RequestUri = new Uri(uri), Method = HttpMethod.Post };
        m.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

        HttpResponseMessage response = await client.SendAsync(m);
4

1 回答 1

0

也许缺少斜线:

    client.BaseAddress = new Uri("http://localhost:xxxxx");
    client.DefaultRequestHeaders.Add("header1", "xxx");


    var uri = $"{client.BaseAddress}v1/CoreEndpoint";

=> http://localhost:xxxxxv1/CoreEndpoint

如果您将其更改为:

    var uri = $"{client.BaseAddress}/v1/CoreEndpoint";
于 2021-07-02T06:38:53.480 回答