2013-04-23 118 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 
    } 
}