【问题标题】:SendGrid POST suppressions: Bad RequestSendGrid POST 抑制:错误请求
【发布时间】:2016-10-31 16:32:23
【问题描述】:

我正在尝试创建一个 GUI 来管理 SendGrid 上的电子邮件组抑制,并且我在 C# .NET 环境中工作,我对此几乎没有经验。

文档显示了我需要用于 unsubscribing (POST) 和重新订阅 (DELETE) 电子邮件组的两个端点。

我能够让 DELETE 请求工作,但 POST 请求的文档不是很清楚,或者我只是不明白。

我试过了:

var request = new RestRequest("v3/asm/groups/" + group.id + "/suppressions", Method.POST);
request.AddParameter("recipient_emails", "['email@example.com']");

但我收到了 BadRequest 响应:

无效的 JSON:无效字符 'r' 寻找值的开头

我也试过这些:

var request = new RestRequest("v3/asm/groups/" + group.id + "/suppressions?{\"recipient_emails\":[\"email@example.com\"]}", Method.POST);

var request = new RestRequest("v3/asm/groups/" + group.id + "/suppressions?recipient_emails=['email@example.com']", Method.POST);

但我得到了不同的 BadRequest 响应:

无效的 JSON:JSON 输入意外结束

我了解错误消息,但我什至不确定我所做的是否正确。关于我需要做什么才能获得成功响应的任何指示?

另外,我知道 SendGrid 提供了一个 C# 库,但我无法让它工作。我不是 C# 开发人员,但因为我们落后了,所以我必须这样做。我想如果我能理解一个简化的版本,我应该可以在以后继续集成这个库。

谢谢。

【问题讨论】:

    标签: c# sendgrid


    【解决方案1】:

    我认为这里的问题是您的请求中没有指定 content-type 应该是 application/json。根据this answer,尝试类似:

    request.Method = Method.POST;
    request.AddHeader("Accept", "application/json");
    request.Parameters.Clear();
    request.AddParameter("application/json", strJsonContent, ParameterType.RequestBody);
    

    strJsonContent 是一个 JSON 字符串。要构造此字符串,您可能需要使用 JSON.NET 之类的东西。

    【讨论】:

    • 感谢您的建议。我从我的代码(和 Auth 标头)中省略了 request.AddHeader("Content-Type", " multipart/form-data");request.AddHeader("Accept", "application/json"); 行。但是您提供了一些不同的代码示例,我将尝试看看是否可以让它工作。再次感谢。
    • 是的!有效!!我使用了您的 AddParameter 方法并手工制作了我自己的 JSON 字符串作为快速测试,并且它确实有效!谢谢!我打算将这个 NewtonSoft 东西用于 JSON,但我会将它标记为已接受。
    • 是的,我认为重要的是ParameterType,否则这些参数最终会出现在查询字符串中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多