C# HttpClient从API返回html
尝试使用HttpClient从API获取json响应,但继续获取html响应。在浏览器和Postman中,我只需输入url,就可以得到json格式的结果。使用RestSharp时,我也会得到json格式的响应。我需要添加什么才能获得json格式的响应?变量responseString是html字符串,而不是json字符串 我使用.NETCore3.1 代码如下:C# HttpClient从API返回html,c#,.net,.net-core,dotnet-httpclient,C#,.net,.net Core,Dotnet Httpclient,尝试使用HttpClient从API获取json响应,但继续获取html响应。在浏览器和Postman中,我只需输入url,就可以得到json格式的结果。使用RestSharp时,我也会得到json格式的响应。我需要添加什么才能获得json格式的响应?变量responseString是html字符串,而不是json字符串 我使用.NETCore3.1 代码如下: class Program { static async Task Main(string[] args) {
class Program
{
static async Task Main(string[] args)
{
var response = await GetResponse();
System.Console.ReadKey();
}
public static async Task<string> GetResponse()
{
var client = new HttpClient();
client.BaseAddress = new Uri("https://musicbrainz.org/ws/2/");
client.DefaultRequestHeaders.Add("Accept",
"application/json");
using var response = await client.GetAsync((
"/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?fmt=json&inc=url-rels+release-groups"));
response.EnsureSuccessStatusCode();
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
}
类程序
{
静态异步任务主(字符串[]args)
{
var response=等待GetResponse();
System.Console.ReadKey();
}
公共静态异步任务GetResponse()
{
var client=新的HttpClient();
client.BaseAddress=新Uri(“https://musicbrainz.org/ws/2/");
client.DefaultRequestHeaders.Add(“接受”,
“应用程序/json”);
使用var response=await client.GetAsync((
“/artist/5b11f4ce-a62d-471e-81fc-a69a8278c7da?fmt=json&inc=url rels+发行组”);
response.EnsureSuccessStatusCode();
var responseString=await response.Content.ReadAsStringAsync();
回报率;
}
}
作为一个旁注,您可能需要考虑将您的<代码> HTTPcli客< /代码>声明为静态。建议在中使用。另外,如果需要json,则需要使用以下方法:
var result=JsonConvert.DeserializeObject(responseString);
您只需确保已从Nuget软件包安装了Newtonsoft.Json
,并使用
指令将以下内容添加到:
using Newtonsoft.Json;
我认为API正在寻找一个用户代理
尝试添加
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36")
检查responseString
是否是某个在线json解析器中的有效json字符串。如果是,您将无法获得html。您需要将其反序列化为具体对象。问题澄清了,响应是html格式的,而不是json格式的。您可以共享html响应吗?您可以使用WebClient
类吗?它对我很有效,还删除了client.GetAsync(“艺术家/5b11f4ce-a62d-471e-81fc-a69a8278c7da?fmt=json&inc=url rels+发行组”
)