バッチ化された 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」を処理できるように、この規則をオーバーライドする簡単な方法はありますか?