Я создаю запрос restsharp, чтобы вызвать запрос push-запроса пакетной прямой отправки в концентратор уведомлений Azure.Форматирование вывода тела multipart 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--
Которая выглядит правильно. Если я скопирую это в почтальон с заголовками и т. Д., Я могу увидеть тот же ответ об ошибке. HOWEVER в почтовом ящике, когда я удаляю метки кавычек вокруг имен параметров, он работает и возвращает ответ 201.
Так это работает ....
Content-Disposition: form-data; name=notification
Это не
Content-Disposition: form-data; name="notification"
Что кажется действительно странным. Однако, поскольку мы используем restsharp, я не думаю, что у меня есть прямой контроль над исходным результатом для тела запроса. Мне интересно;
- Есть restsharp настройки для управления этой котировки, возможно форматированием настройки
- Почему конечная точка Azure отклонить имя параметра в кавычки
Вполне возможно, что этот вопрос находится в другом месте, и это это красная селедка, но это, похоже, несет ответственность.
Цените любую помощь ...
Удивительно, спасибо efimovandr! Если имена параметров уведомлений и параметров устройства могут принимать цитируемые версии, они должны работать для нас. Где я могу отслеживать статус развертывания/выпуска, чтобы узнать, когда это произойдет? Я буду отмечать как ответ, когда он приходит через ОК. – Grenville
Похоже, что последнее развертывание было завершено во всем мире. Таким образом, исправление должно быть доступно. – efimovandr
Привет, efimovandr, это действительно решило эту конкретную проблему, поэтому спасибо за это! Тем не менее, следующий falldown для restsharp не смог указать тип содержимого в параметре multi-part. К сожалению, он не смог создать требуемое форматирование. Я просто использовал обычный HttpClient и получил правильное форматирование, и он отлично работает. Однако, поскольку вопрос касался форматирования с помощью RestSharp, я не хочу отмечать ответ как правильный, поскольку он может ввести в заблуждение других. Еще раз спасибо за внесение изменений! – Grenville