如何使用.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
相关产品推荐
相关产品推荐

