asp.net - 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 ?
解决方案
我用下面的代码做了一个测试,我建议你做一个测试:
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;
}
}