HttpGet IActionResult 方法调用微服务 returns 所有属性为 null

HttpGet IActionResult method calling microservice returns all attributes as null

我正在关注 this tutorial 并专门使用 基本用法 部分中的代码。

当我从 Postman 向 http://localhost:9000/api/gateway 发送 GET 请求时,我得到了正确数量的对象,与数据库中的一样多,但所有属性空。

我尝试将 ReadAsStreamAsync 更改为 ReadAsStringAsync,实际上我得到了一个大字符串,一个包含数据库中所有记录的数组。

那里的属性不是空的,但我不知道如何将字符串解析为对象的 IEnumerable,所以这对我帮助不大。

有人知道我可能遗漏了什么吗?请参阅下面的控制器方法。

请注意,该方法将 HTTP 请求发送到 localhost:5000,但该方法本身会在 localhost:9000 上接收传入请求。

目标是创建一个 API 网关,它调用另一个微服务并且不应该直接访问它正在调用的微服务的数据库。

public async Task<IActionResult> GetAllPatientsAsync()
    {
        var httpRequestMessage = new HttpRequestMessage(
HttpMethod.Get, "http://localhost:5000/api/patients")
        {
            Headers =
        {
            { HeaderNames.Accept, "application/json" }
        }
        };
        var httpClient = httpClientFactory.CreateClient();
        var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage);

        if (httpResponseMessage.IsSuccessStatusCode)
        {
            using var contentStream =
                await httpResponseMessage.Content.ReadAsStreamAsync();
            PatientDtos = await JsonSerializer.DeserializeAsync
                <IEnumerable<PatientDto>>(contentStream);                

        }


        if (PatientDtos == null) return NotFound(); // 404 Not Found

        return Ok(PatientDtos);
    }

原来是 JsonSerializer 的问题。以下更改对我有用:

PatientDtos = await JsonSerializer.DeserializeAsync<IEnumerable<PatientDto>>(
 contentStream, new JsonSerializerOptions
 {
   PropertyNamingPolicy = JsonNamingPolicy.CamelCase
 });

更多信息here