如何在 C# 中使用 Sendgrid (v3) 创建自定义字段定义?
How to create custom field definitions with Sendgrid (v3) in C#?
根据 V3 Sendgrid 文档,我可以使用它们的 API 创建自定义定义:
https://docs.sendgrid.com/api-reference/custom-fields/create-custom-field-definition
我的代码如下:
public static async void addCustomDefinition(SendGridClient client)
{
var data = "{ 'name': 'test_name', 'field_type': 'Text' }";
var response = await client.RequestAsync(
method: SendGridClient.Method.POST,
urlPath: "marketing/field_definitions", //"contactdb /custom_fields",
requestBody: data
);
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.Body.ReadAsStringAsync().Result);
Console.WriteLine(response.Headers.ToString());
}
但是,我收到以下输出错误消息:
BadRequest
{"errors":[{"field":"body","message":"无效字符'\''寻找对象键字符串的开头"}]}
我做错了什么?
PS:我更改了urlPath
参数:
...来自在线指南:
urlPath: "v3/marketing/field_definitions,
到这个版本:
urlPath: "marketing/field_definitions",
这个较新的版本适用于其他命令,例如获取字段定义和创建联系人列表
如您正确所述,传入前缀为 v3
的 urlPath
无效。这是因为 SendGridClient
会自动为您添加它。您可以将 version
命名参数传递给构造函数,或使用 SendGridClient
上的 Version
属性 来根据需要更改前置的版本。
目前默认为 "v3"
.
另一个问题是 data
变量包含无效的 JSON。在 JSON 中不允许使用单引号,而必须使用双引号。
您可以使用反斜杠转义 single-line 字符串中的双引号:
var data = "{\"name\": \"custom_field_name\", \"field_type\": \"Text\"}";
您可以通过添加额外的双引号来转义 multi-line 字符串中的双引号:
var data = @"{
""name"": ""custom_field_name"",
""field_type"": ""Text""
}";
或者,您可以创建 .NET 对象并使用 System.Text.Json, JSON.NET 或其他 JSON 库将它们序列化为有效的 JSON 字符串。
进行这些更改后,您的代码应如下所示:
public static async void addCustomDefinition(SendGridClient client)
{
var data = "{ \"name\": \"test_name\", \"field_type\": \"Text\" }";
var response = await client.RequestAsync(
method: SendGridClient.Method.POST,
urlPath: "marketing/field_definitions",
requestBody: data
);
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.Body.ReadAsStringAsync().Result);
Console.WriteLine(response.Headers.ToString());
}
SendGrid 客户端库似乎进行了一些更改,但尚未反映在您链接的文档中。此问题和文档中的其他问题将很快得到解决。
让我们知道这是否解决了您的问题!
根据 V3 Sendgrid 文档,我可以使用它们的 API 创建自定义定义: https://docs.sendgrid.com/api-reference/custom-fields/create-custom-field-definition
我的代码如下:
public static async void addCustomDefinition(SendGridClient client)
{
var data = "{ 'name': 'test_name', 'field_type': 'Text' }";
var response = await client.RequestAsync(
method: SendGridClient.Method.POST,
urlPath: "marketing/field_definitions", //"contactdb /custom_fields",
requestBody: data
);
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.Body.ReadAsStringAsync().Result);
Console.WriteLine(response.Headers.ToString());
}
但是,我收到以下输出错误消息:
BadRequest {"errors":[{"field":"body","message":"无效字符'\''寻找对象键字符串的开头"}]}
我做错了什么?
PS:我更改了urlPath
参数:
...来自在线指南:
urlPath: "v3/marketing/field_definitions,
到这个版本:
urlPath: "marketing/field_definitions",
这个较新的版本适用于其他命令,例如获取字段定义和创建联系人列表
如您正确所述,传入前缀为 v3
的 urlPath
无效。这是因为 SendGridClient
会自动为您添加它。您可以将 version
命名参数传递给构造函数,或使用 SendGridClient
上的 Version
属性 来根据需要更改前置的版本。
目前默认为 "v3"
.
另一个问题是 data
变量包含无效的 JSON。在 JSON 中不允许使用单引号,而必须使用双引号。
您可以使用反斜杠转义 single-line 字符串中的双引号:
var data = "{\"name\": \"custom_field_name\", \"field_type\": \"Text\"}";
您可以通过添加额外的双引号来转义 multi-line 字符串中的双引号:
var data = @"{
""name"": ""custom_field_name"",
""field_type"": ""Text""
}";
或者,您可以创建 .NET 对象并使用 System.Text.Json, JSON.NET 或其他 JSON 库将它们序列化为有效的 JSON 字符串。
进行这些更改后,您的代码应如下所示:
public static async void addCustomDefinition(SendGridClient client)
{
var data = "{ \"name\": \"test_name\", \"field_type\": \"Text\" }";
var response = await client.RequestAsync(
method: SendGridClient.Method.POST,
urlPath: "marketing/field_definitions",
requestBody: data
);
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.Body.ReadAsStringAsync().Result);
Console.WriteLine(response.Headers.ToString());
}
SendGrid 客户端库似乎进行了一些更改,但尚未反映在您链接的文档中。此问题和文档中的其他问题将很快得到解决。
让我们知道这是否解决了您的问题!