[C#] 透過程式 新增/刪除/修改 Cloudflare 中的 DNS Record

上一篇文章 取得在 Cloudflare 中的 DNS Records ,我們拿到了 Cloudflare 的 Zone Id , API Token 也成功取得了 DNS Record 記錄們,接下來我們要來自己新增/刪除/修改他們




1. 新增紀錄 ,目標我要新增一個 A 紀錄為  demo1 ,讓我的sample.com 擁有一個 demo1.sample.com 指向 163.13.202.22 ,官方網站給的案例是

curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
-H "X-Auth-Email: user@example.com" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"example.com","content":"127.0.0.1","ttl":120,"priority":10,"proxied":false}'


這時候我們必須要傳一個物件進去,這邊我準備好了

public class AddDNSRequest
{
public string type { get; set; }
public string name { get; set; }
public string content { get; set; }
public int ttl { get; set; }
public int priority { get; set; }
public bool proxied { get; set; }
}


這時候就是呼叫的 C# Code ,回應的 JSON 我放在註解裡面

HttpClient clientGetZones = new HttpClient();
clientGetZones.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer [API TOKEN]");
clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer abcdedghijklmnopQRSTUV_ABCD_ggggPqCD");
//var url1 = "https://api.cloudflare.com/client/v4/zones/[ZONE_ID]/dns_records";
var url1 = "https://api.cloudflare.com/client/v4/zones/2836714271b942af9386532b00b5579c/dns_records";
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, url1);
var req = new AddDNSRequest();
req.name = "demo1";
req.proxied = true;
req.type = "A";
req.content = "163.13.202.22";
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
HttpResponseMessage response = clientGetZones.SendAsync(requestMessage).GetAwaiter().GetResult();
var res = response.Content.ReadAsStringAsync().Result.ToString();
ltlResult.Text = JsonConvert.SerializeObject(res);
//result
//{"id":"52991924ec82a967d45caab25cbf6a90","zone_id":"2836714271b942af9386532b00b5579c","zone_name":"sample.com","name":"demo1.sample.com","type":"A","content":"163.13.202.22","proxiable":true,"proxied":true,"ttl":1,"locked":false,"meta":{"auto_added":false,"managed_by_apps":false,"managed_by_argo_tunnel":false,"source":"primary"},"created_on":"2020-10-28T01:46:39.057696Z","modified_on":"2020-10-28T01:46:39.057696Z"},"success":true,"errors":[],"messages":[]}"


Reference : https://api.cloudflare.com/#dns-records-for-a-zone-create-dns-record

2. 承襲第一點,我要修改 demo1  的紀錄 將指向改到 163.13.202.11 ,每一紀錄都會有獨立編號ID,可以針對該ID修傳遞物件跟第一個一樣,但是要用 HTTP PUT

官方案例 curl

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \
-H "X-Auth-Email: user@example.com" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"example.com","content":"127.0.0.1","ttl":120,"proxied":false}'


C# Code

HttpClient clientGetZones = new HttpClient();
clientGetZones.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer [API TOKEN]");
clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer abcdedghijklmnopQRSTUV_ABCD_ggggPqCD");
//var url1 = "https://api.cloudflare.com/client/v4/zones/[ZONE ID]/dns_records/[RECORD ID]";
var url1 = "https://api.cloudflare.com/client/v4/zones/2836714271b942af9386532b00b5579c/dns_records/52991924ec82a967d45caab25cbf6a90";
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Put, url1);
var req = new AddDNSRequest();
req.name = "demo1";
req.proxied = true;
req.type = "A";
req.content = "163.13.202.11";
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
HttpResponseMessage response = clientGetZones.SendAsync(requestMessage).GetAwaiter().GetResult();
var res = response.Content.ReadAsStringAsync().Result.ToString();
ltlResult.Text = JsonConvert.SerializeObject(res);


reference : https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record

3. 承襲第一點,或是上篇文章 取得在 Cloudflare 中的 DNS Records 每一個紀錄都有一個獨立編號ID ,可以針對該 ID 進行刪除,官方的 curl sample

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \
-H "X-Auth-Email: user@example.com" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json"


C# Code ,回應的 JSON 我放在註解裡面,稍微注意的是他是要用 HTTP DELETE 

HttpClient clientGetZones = new HttpClient();
clientGetZones.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer [API TOKEN]");
clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer abcdedghijklmnopQRSTUV_ABCD_ggggPqCD");
//var url1 = "https://api.cloudflare.com/client/v4/zones/[ZONE ID]/dns_records/[RECORD ID]";
var url1 = "https://api.cloudflare.com/client/v4/zones/2836714271b942af9386532b00b5579c/dns_records/52991924ec82a967d45caab25cbf6a90";
var res = clientGetZones.DeleteAsync(url1).Result.Content.ReadAsStringAsync().Result;
ltlResult.Text = JsonConvert.SerializeObject(res);
//Result:
//"{"result":{"id":"52991924ec82a967d45caab25cbf6a90"},"success":true,"errors":[],"messages":[]}"


Reference : https://api.cloudflare.com/#dns-records-for-a-zone-delete-dns-record


基本上大概就是這樣,本來想用 nuget 上面套件的,但是想說看文件的時間不如自己動手,就玩一下吧,有時間我在裝起來好了。

---

 

請你暫時把你的勇氣給我 在夢想快消失的時候 讓我的 Code 用力的穿過天空 為愛我的人做一秒英雄 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...