我正在尝试使用 asp.net web api 应用程序来处理批处理的 SendGrid 事件,但由于 SendGrid 处理它发送的帖子的内容类型标题的方式,我遇到了一个绊脚石。
从他们的文档中:
批处理事件 POST 的内容类型标头为 application/json,每行仅包含一个 JSON 字符串,每一行代表一个事件。请注意,目前 POST 标头将此帖子定义为 application/json,尽管它不是;每行都是有效的 JSON 字符串,但整个 POST 正文不是。
所以,给定一个控制器:
public class SendGridController : ApiController
{
// POST api/values
public void Post([FromBody]string value)
{
// do something with value
}
}
像 SendGrid 那样向其发布帖子将导致“值”为空。
string URI = "http://localhost:3018/api/sendgrid/";
string myParameters =
@"={""email"":""foo@bar.com"",""timestamp"":1322000095,""user_id"":""6"",""event"":""bounced""}
{""email"":""foo@bar.com"",""timestamp"":1322000096,""user_id"":""9"",""event"":""bounced""}";
using (var wc = new System.Net.WebClient())
{
wc.Headers[System.Net.HttpRequestHeader.ContentType] = "application/json"; // I work fine if "application/x-www-form-urlencoded" is used.
wc.UploadString(URI, myParameters);
}
如果我将客户端示例中的内容类型更改为“application/x-www-form-urlencoded”,一切都会按预期工作。
是否有一种简单的方法可以覆盖此约定,以便我可以处理 sendgrid 在我的控制器方法中作为字符串提供的格式错误的“json”?