Asp.net web api 使用asp.net web api处理批处理sendgrid事件

Asp.net web api 使用asp.net web api处理批处理sendgrid事件,asp.net-web-api,sendgrid,Asp.net Web Api,Sendgrid,我试图使用asp.net web api应用程序处理成批SendGrid事件,但由于SendGrid处理其发送的帖子的内容类型标题的方式,我遇到了一个绊脚石 从他们的: 批处理事件帖子的内容类型标题为application/json, 并且每行仅包含一个JSON字符串 代表一个事件。请注意,当前的帖子标题 将本文定义为application/json,尽管它不是;每一行都是一个 有效的JSON字符串,但整个帖子正文不是 因此,给定一个控制器: public class SendGridContr

我试图使用asp.net web api应用程序处理成批SendGrid事件,但由于SendGrid处理其发送的帖子的内容类型标题的方式,我遇到了一个绊脚石

从他们的:

批处理事件帖子的内容类型标题为application/json, 并且每行仅包含一个JSON字符串 代表一个事件。请注意,当前的帖子标题 将本文定义为application/json,尽管它不是;每一行都是一个 有效的JSON字符串,但整个帖子正文不是

因此,给定一个控制器:

public class SendGridController : ApiController 
{ 
   // POST api/values 
   public void Post([FromBody]string value) 
   { 
   // do something with value
   }
}
像SendGrid那样向其发送帖子将导致“value”为null

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”?

好的,我终于找到了答案。诀窍是删除“value”参数并直接处理请求对象

比如:

public class SendGridController : ApiController 
{ 
   // POST api/values 
   public void Post() 
   { 
      var value = Request.Content.ReadAsStringAsync().Result;
      // do something with value
   }
}

好吧,我终于明白了。诀窍是删除“value”参数并直接处理请求对象

比如:

public class SendGridController : ApiController 
{ 
   // POST api/values 
   public void Post() 
   { 
      var value = Request.Content.ReadAsStringAsync().Result;
      // do something with value
   }
}

这不是对你问题的回答,但如果你向community@sendgrid.com,我们可以将您添加到测试版以获取有效的JSON数据。这不是对您问题的回答,但如果您向community@sendgrid.com,我们可以将您添加到测试版以获取有效的JSON数据。