如何在 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",

这个较新的版本适用于其他命令,例如获取字段定义和创建联系人列表

如您正确所述,传入前缀为 v3urlPath 无效。这是因为 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 客户端库似乎进行了一些更改,但尚未反映在您链接的文档中。此问题和文档中的其他问题将很快得到解决。

让我们知道这是否解决了您的问题!