首页 > 解决方案 > HttpClient - 没有 mediatypeformatter 可用于读取“模型”类型的对象

问题描述

我正在将 httpclient 与 .net core 2.1 一起使用。现在的问题是当我尝试从 url 获取数据时,我收到错误“没有 mediatypeformatter 可用于读取'Model'类型的对象”。该代码在其他地方运行良好,但在这里我遇到了异常。这是代码:

            string url = uri;
            _httpClient.BaseAddress = new Uri(somestring);
            _httpClient.DefaultHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = await _httpClient.GetAsync(url);
            response.EnsureSuccessStatusCode();
            return await response.Content.ReadAsAsync<MyModel>();

如果我使用 response.Content.ReadAsStringAsync() 并使用 JsonConvert 反序列化字符串,则它可以正常工作,但我认为 _httpClient 不是那么灵活。在使用 restsharp 之前很长一段时间我也遇到过这个问题,但后来我使用了“application/json; charset=utf-8”,它开始正常工作。那么有没有办法在 httpclient 内容类型标头中添加 charset=utf-8 ?

标签: asp.netasp.net-corehttpclientasp.net-core-2.0

解决方案


我用下面的代码做了一个测试,我建议你做一个测试:

        HttpClient client = new HttpClient();

        var response = await client.GetAsync(@"https://localhost:44342/Products");
        response.EnsureSuccessStatusCode();
        var result = await response.Content.ReadAsAsync<Product>();

由于它适用于JsonConvert,我建议您尝试为Content解决方法实现扩展方法。

public static class HttpContentExtensions
    {
        public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content)
        {
            string json = await content.ReadAsStringAsync();
            T value = JsonConvert.DeserializeObject<T>(json);
            return value;
        }
    }

推荐阅读