0

バッチダイレクト送信プッシュ要求を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のエンドポイントが引用符

でパラメータ名を拒否し、なぜ、おそらく

  • を設定フォーマットは問題が別の場所であることも可能であり、この、あります赤ちゃんですが、これは責任があるようです。

  • 答えて

    1

    が私たちのマニュアルを参照してよると...任意の助けに感謝、要求は次のようになります。

    だから、
    POST https://{Namespace}.servicebus.windows.net/{Notification Hub}/messages/$batch?direct&api-version=2015-08 HTTP/1.1 
    Content-Type: multipart/mixed; boundary="simple-boundary" 
    Authorization: SharedAccessSignature sr=https%3a%2f%2f{Namespace}.servicebus.windows.net%2f{Notification Hub}%2fmessages%2f%24batch%3fdirect%26api-version%3d2015-08&sig={Signature}&skn=DefaultFullSharedAccessSignature 
    ServiceBusNotification-Format: gcm 
    Host: {Namespace}.servicebus.windows.net 
    Content-Length: 431 
    Expect: 100-continue 
    Connection: Keep-Alive 
    
    
    --simple-boundary 
    Content-Type: application/json 
    Content-Disposition: inline; name=notification 
    
    {"data":{"message":"Hello via Direct Batch Send!!!"}} 
    --simple-boundary 
    Content-Type: application/json 
    Content-Disposition: inline; name=devices 
    
    ["Device Token1","Device Token2","Device Token3"] 
    --simple-boundary-- 
    

    nameパラメータの値は、(name=devices)を引用していません。状況に関する要件を明示的に指定するRFCは見つかりませんでした。しかし、RFCの内部の例では、値が引用されているように見えます。そのため、私は両方のオプションをサポートするようにサービスを修正するつもりです。修正は、1週間ほどで次の展開に来るはずです。

    +0

    すばらしい、ありがとうefimovandr!通知とデバイスのパラメータ名が引用されたバージョンを受け入れることができるなら、それは私たちのために働くはずです。このような状況が発生したときを知るために、どこに配置/リリースステータスを監視できますか?私はそれがOKを通ってくるときに答えとしてマークします。 – Grenville

    +0

    最新の展開が世界中で完了したようです。したがって、修正が利用可能になるはずです。 – efimovandr

    +0

    こんにちはefimovandr、それは実際にその特定の問題を解決したので、それを変更してくれてありがとう!しかし、restsharpの次のフォールダウンでは、マルチパートのパラメータでコンテンツタイプを指定できませんでした。残念ながら、必要な書式を作成できませんでした。 私はちょうど通常のHttpClientを使用し、正しい書式設定を得ました。しかし、質問はRestSharpで実際に書式を設定することであったため、他の人を誤解させる可能性のある正しい答えとしてマークしたくありません。しかし、もう一度変更をしてくれてありがとう! – Grenville

    関連する問題