2013-04-23 214 views
1

我试图用一个asp.net的Web API应用程序来处理成批SendGrid事件,我已经因路碰上的绊脚石SendGrid处理的内容类型sendgrid事件它发送的帖子的标题。处理批量使用asp.net网页API

从他们documentation

成批事件柱具有应用/ 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"":""[email protected]"",""timestamp"":1322000095,""user_id"":""6"",""event"":""bounced""} 
{""email"":""[email protected]"",""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); 
} 

如果我改变内容类型我的客户为例,“应用程序/ x-WWW的形式,进行了urlencoded”,一切正常。

有一个简单的办法,我来覆盖这个约定,这样我就可以搞定sendgrid提供在我的控制器方法的字符串格式错误的“JSON”?

+0

这不是一个回答你的问题,但如果你拍电子邮件至[email protected],我们可以ADDD您的测试版有效的JSON数据。 – Swift 2013-04-23 17:04:37

回答

0

好吧,我终于想通了。窍门是直接删除“value”参数并使用请求对象。

因此,像:

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