首页 > 解决方案 > HttpResponseMessage 发送和接收列表或数组

问题描述

使用最新的 System.Net.Http.Json 有一些方法可以帮助进行序列化/反序列化。我想使用 HttpResponseMessage 内容来保存我的响应对象。它们似乎可以很好地存储在服务器上,但是当我在客户端获取它们时,内容并不是我所期望的。注入了很多额外的数据,我不知道如何通过额外的元数据传递一些数据。

我不确定发生了什么..如果我尝试使用:

Content = new StringContent("test content")

在客户端我得到“测试内容”,但我得到了这个:

内容:{"version":"1.1","content":{"headers":[{"key":"Content-Type","value":["text/plain; charset=utf-8"]} ]},"statusCode":200,"reasonPhrase":"Retrieved Forecasts","headers":[],"trailingHeaders":[],"requestMessage":null,"isSuccessStatusCode":true}

这是我的 Blazor 代码:

客户:

protected override async Task OnInitializedAsync()
{
    try
    {
        //forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");


        HttpResponseMessage httpResponse = await Http.GetAsync("WeatherForecast");

        if (httpResponse.IsSuccessStatusCode)
        {
            Console.WriteLine("Response Weather");
            //forecasts = (await httpResponse.Content.ReadFromJsonAsync<WeatherForecast[]>()).ToList<WeatherForecast>();
            Console.WriteLine("Content: " + await httpResponse.Content.ReadAsStringAsync());

            //forecasts = Newtonsoft.Json.JsonConvert.DeserializeObject<WeatherForecast[]>(await httpResponse.Content.ReadAsStringAsync()).ToList<WeatherForecast>(); // Doesn't work
            forecasts = await httpResponse.Content.ReadFromJsonAsync<WeatherForecast[]>(); //Doesn't work

        }
    }
    catch (AccessTokenNotAvailableException exception)
    {
        exception.Redirect();
    }
}

服务器:

    [HttpGet]
    public async Task<HttpResponseMessage> Get()
    {
        var rng = new Random();
        WeatherForecast[] weather =  Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();


        HttpResponseMessage message = new HttpResponseMessage
        {
            StatusCode = OK,
            ReasonPhrase = "Retrieved Weather",
            //Content = new StringContent("test content")
            //Content = JsonContent.Create<WeatherForecast[]>(weather)
            //Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(weather))
        };

        string test = await message.Content.ReadAsStringAsync();  // This looks correct!
        return message;
    }

标签: .net-coreblazor

解决方案


推荐阅读