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

如何使用.NET Core向GoDaddy DNS配置添加TXT记录?能否通过代码实现?

技术可行性确认

完全可行。GoDaddy提供了官方REST API用于管理域名的DNS记录,支持添加、修改、删除包括TXT在内的各类记录,只要你持有GoDaddy账号的API密钥以及目标域名的管理权限,就能用C#/.NET Core完成这个操作。

具体实现步骤

1. 获取GoDaddy API密钥

  • 登录GoDaddy开发者平台创建应用,获取API Key和API Secret
  • 注意区分生产环境和测试环境密钥,测试阶段可以用平台提供的测试域名验证功能

2. 核心代码实现

首先定义对应DNS记录的模型类:

public class DnsRecord
{
    public string Type { get; set; }
    public string Name { get; set; }
    public string Data { get; set; }
    public int Ttl { get; set; } // 生存时间,单位秒,默认建议3600
}

然后编写API调用的管理类:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class GoDaddyDnsManager
{
    private readonly HttpClient _httpClient;
    private readonly string _apiCredentials;
    private const string ProductionBaseUrl = "https://api.godaddy.com/v1";
    private const string TestBaseUrl = "https://api.ote-godaddy.com/v1";
    private readonly string _baseUrl;

    public GoDaddyDnsManager(string apiKey, string apiSecret, bool isTestEnvironment = false)
    {
        _apiCredentials = $"{apiKey}:{apiSecret}";
        _baseUrl = isTestEnvironment ? TestBaseUrl : ProductionBaseUrl;
        
        _httpClient = new HttpClient();
        _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("sso-key", _apiCredentials);
    }

    // 添加指定的TXT记录
    public async Task<bool> AddTxtRecord(string domain, string recordName, string recordData, int ttl = 3600)
    {
        var newRecord = new[]
        {
            new DnsRecord
            {
                Type = "TXT",
                Name = recordName,
                Data = recordData,
                Ttl = ttl
            }
        };

        var jsonPayload = JsonConvert.SerializeObject(newRecord);
        var requestContent = new StringContent(jsonPayload, Encoding.UTF8, "application/json");

        var response = await _httpClient.PutAsync($"{_baseUrl}/domains/{domain}/records/TXT/{recordName}", requestContent);
        
        return response.IsSuccessStatusCode;
    }

    // 可选:查询域名下已有的TXT记录,避免重复添加
    public async Task<DnsRecord[]> GetTxtRecords(string domain, string recordName = null)
    {
        var requestUrl = string.IsNullOrEmpty(recordName) 
            ? $"{_baseUrl}/domains/{domain}/records/TXT" 
            : $"{_baseUrl}/domains/{domain}/records/TXT/{recordName}";

        var response = await _httpClient.GetAsync(requestUrl);
        if (!response.IsSuccessStatusCode)
            return Array.Empty<DnsRecord>();

        var json = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<DnsRecord[]>(json);
    }
}

3. 使用示例

class Program
{
    static async Task Main(string[] args)
    {
        // 替换为你的API密钥、密钥密码和域名
        string apiKey = "your-api-key";
        string apiSecret = "your-api-secret";
        string targetDomain = "your-domain.com";
        // 记录名称:@代表根域名,子域名填比如"mail"
        string recordName = "@";
        // 替换为你获取到的TXT记录内容
        string txtRecordData = "your-txt-record-content";

        var dnsManager = new GoDaddyDnsManager(apiKey, apiSecret);
        
        // 可选:先查询是否已存在该记录
        var existingRecords = await dnsManager.GetTxtRecords(targetDomain, recordName);
        if (existingRecords.Length > 0)
        {
            Console.WriteLine("该TXT记录已存在");
            return;
        }

        bool isSuccess = await dnsManager.AddTxtRecord(targetDomain, recordName, txtRecordData);
        Console.WriteLine(isSuccess ? "TXT记录添加成功" : "TXT记录添加失败");
    }
}

关键注意事项

  • 确保你的API密钥拥有DNS记录修改的权限,创建应用时要选择对应的权限范围
  • 测试环境不能操作真实域名,必须使用GoDaddy提供的测试域名
  • TXT记录内容如果包含特殊字符(如引号),要保证正确转义,避免JSON序列化出错
  • API调用有频率限制,注意不要超过阈值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:33:22