You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用Check-Host.Net API时如何设置Accept:application/json获取JSON响应

问题原因

你的代码无法获取预期结果有两个核心问题:

  • 接口请求缺少必填的User-Agent请求头,Check-Host.net会拦截无合法标识的默认HttpClient请求,不会返回目标JSON结构。
  • 返回值中的nodes字段键名是动态的节点域名,无法通过固定命名的强类型属性(比如你写的Us1NodeCheckHostNet)反序列化,需要用字典类型做映射。
正确实现步骤
  • 为HttpClient添加合法的User-Agent请求头
  • 将响应模型中的Nodes类型定义为Dictionary<string, string[]>,适配动态键名
  • 避免使用.Result同步阻塞异步调用,改用await异步语法防止死锁
可运行代码示例

首先定义响应映射模型:

using Newtonsoft.Json;

public class CheckHostTcpResponse
{
    [JsonProperty("ok")]
    public int Ok { get; set; }

    [JsonProperty("request_id")]
    public string RequestId { get; set; }

    [JsonProperty("permanent_link")]
    public string PermanentLink { get; set; }

    [JsonProperty("nodes")]
    public Dictionary<string, string[]> Nodes { get; set; }
}

发起请求的业务代码:

using Newtonsoft.Json;

// 生产环境建议将HttpClient声明为静态单例复用,避免频繁创建导致端口耗尽
private static readonly HttpClient httpClient = new HttpClient();

// 初始化配置必填请求头
httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36");

// 构造请求地址
Uri requestUri = new Uri("https://check-host.net/check-tcp?host=https://sheypoor.com&max_nodes=1&node=us1.node.check-host.net");

// 异步发起请求获取响应
string responseContent = await httpClient.GetStringAsync(requestUri);

// 反序列化响应
CheckHostTcpResponse result = JsonConvert.DeserializeObject<CheckHostTcpResponse>(responseContent);

// 读取目标节点数据
if (result.Nodes != null && result.Nodes.TryGetValue("us1.node.check-host.net", out string[] usNodeInfo))
{
    Console.WriteLine(usNodeInfo[0]); // 输出预期值:us
}
注意事项
  • User-Agent值不需要完全和示例一致,只要是合法非空的标识即可,接口仅校验该请求头是否存在。
  • 字典类型的映射方式兼容所有节点返回,后续如果接口返回其他区域节点,不需要修改模型代码即可直接通过键名读取对应信息。
  • 禁止在异步上下文里使用.Result、.Wait()等同步阻塞方法,否则很容易引发线程死锁导致程序无响应。

内容的提问来源于stack exchange,提问作者Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:24:09