1

バッチ化された SendGrid イベントを処理するために asp.net Web API アプリケーションを使用しようとしていますが、SendGrid が送信する投稿のコンテンツ タイプ ヘッダーを処理する方法が原因でつまずきに遭遇しました。

彼らのドキュメントから:

バッチ処理されたイベント POST には、application/json の content-type ヘッダーがあり、行ごとに 1 つの JSON 文字列が含まれ、各行は 1 つのイベントを表します。現在、POST ヘッダーはこの投稿を application/json として定義していますが、そうではないことに注意してください。各行は有効な JSON 文字列ですが、POST 本体全体はそうではありません。

したがって、コントローラーが与えられた場合:

public class SendGridController : ApiController 
{ 
   // POST api/values 
   public void Post([FromBody]string value) 
   { 
   // do something with value
   }
}

SendGrid のように投稿すると、"値" が 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」を処理できるように、この規則をオーバーライドする簡単な方法はありますか?

4

1 に答える 1