バッチダイレクト送信プッシュ要求をAzure通知ハブにオフにするためにrestsharp要求を作成しています。複数のHTTP要求ボディ出力をrestsharpでフォーマットする
私は、400 Bad Requestレスポンスを受信しました。提供されたマルチパートコンテンツで「通知」の部分を見つけることができませんでした。
リクエストはこのように見えます。
const string multipartContentType = "multipart/form-data; boundary=\"simple-boundary\"";
const string authSignature = "myvalidauthsignature";
const string url = "mynotificanhuburl";
const string message = "Some message";
var restClient = new RestClient
{
BaseUrl = new Uri(url),
Proxy = new WebProxy("127.0.0.1", 8888),
};
var request = new RestSharp.RestRequest(Method.POST)
{
RequestFormat = DataFormat.Json,
AlwaysMultipartFormData = true
};
request.AddHeader("Content-Type", multipartContentType);
request.AddHeader("Authorization", authSignature);
request.AddHeader("ServiceBusNotification-Format", "gcm");
request.AddParameter("notification", JsonConvert.SerializeObject(new { data = new { message } }), ParameterType.GetOrPost);
request.AddParameter("devices", JsonConvert.SerializeObject(new List<string> { "123", "456" }), ParameterType.GetOrPost);
var response = restClient.Execute(request);
私はFiddler経由で生のリクエストを見ることができます。
POST https://xxxxx.servicebus.windows.net/xxx/messages/$batch?direct&api-version=2015-04 HTTP/1.1
Authorization: [redacted]
ServiceBusNotification-Format: gcm
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/105.2.3.0
Content-Type: multipart/form-data; boundary=-----------------------------28947758029299
Host: [redacted]
Content-Length: 412
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
-------------------------------28947758029299
Content-Disposition: form-data; name="notification"
{"data":{"message":"Some message"}}
-------------------------------28947758029299
Content-Disposition: form-data; name="devices"
["123","456"]
-------------------------------28947758029299--
これは正しく表示されます。これをヘッダーなどで郵便配達員にコピーすると、私は同じエラー応答を見ることができます。 私はパラメータ名の前後に引用符を削除すると、郵便配達員にがあります。それは動作し、201 Createdレスポンスを返します。
だから、これは
Content-Disposition: form-data; name=notification
は、これは本当に独特思わ
Content-Disposition: form-data; name="notification"
ません....動作します。しかし、restsharpを使用しているので、私は要求本体の生の出力を直接制御することはできません。不思議なんだけど;
- これらの引用符を管理するために設定restsharpは、Azureのエンドポイントが引用符
でパラメータ名を拒否し、なぜ、おそらく
すばらしい、ありがとうefimovandr!通知とデバイスのパラメータ名が引用されたバージョンを受け入れることができるなら、それは私たちのために働くはずです。このような状況が発生したときを知るために、どこに配置/リリースステータスを監視できますか?私はそれがOKを通ってくるときに答えとしてマークします。 – Grenville
最新の展開が世界中で完了したようです。したがって、修正が利用可能になるはずです。 – efimovandr
こんにちはefimovandr、それは実際にその特定の問題を解決したので、それを変更してくれてありがとう!しかし、restsharpの次のフォールダウンでは、マルチパートのパラメータでコンテンツタイプを指定できませんでした。残念ながら、必要な書式を作成できませんでした。 私はちょうど通常のHttpClientを使用し、正しい書式設定を得ました。しかし、質問はRestSharpで実際に書式を設定することであったため、他の人を誤解させる可能性のある正しい答えとしてマークしたくありません。しかし、もう一度変更をしてくれてありがとう! – Grenville