РЕДАКТИРОВАТЬ: Обратите внимание, я знаю, что суть проблемы заключается в том, что служба, с которой мне нужно общаться, не следует протоколу. Это программное обеспечение, к которому я не имею права прикасаться, и оно не будет изменено в ближайшее время. Таким образом, мне нужна помощь в обходе проблемы и нарушении протокола. Развитие во всей красе!
Я пытаюсь связаться с внешней службой. Тот, кто это сделал, решил разбить различные вызовы не только по разным папкам, но и по типам HTTP-запросов. Проблема здесь в том, что мне нужно отправить запрос GET, который включает контент.
Да, это нарушает протокол. Да, это работает, если я формулирую вызов с помощью команд Linux. Да, это работает, если я вручную создам вызов в Fiddler (хотя Fiddler злится на нарушение протокола)
Когда я создаю свой вызов, он заворачивается в асинхронный метод. Однако его отправка приводит к ошибке:
Возникло исключение: «System.Net.ProtocolViolationException» в mscorlib.dll («Невозможно отправить тело содержимого с этим типом команды».)
Код для звонка:
/// <summary>
/// Gets a reading from a sensor
/// </summary>
/// <param name="query">Data query to set data with</param>
/// <returns></returns>
public async Task<string> GetData(string query)
{
var result = string.Empty;
try
{
// Send a GET request with a content containing the query. Don't ask, just accept it
var msg = new HttpRequestMessage(HttpMethod.Get, _dataApiUrl) { Content = new StringContent(query) };
var response = await _httpClient.SendAsync(msg).ConfigureAwait(false);
// Throws exception if baby broke
response.EnsureSuccessStatusCode();
// Convert to something slightly less useless
result = await response.Content.ReadAsStringAsync();
}
catch (Exception exc)
{
// Something broke ¯\_(ツ)_/¯
_logger.ErrorException("Something broke in GetData(). Probably a borked connection.", exc);
}
return result;
}
_httpClient создается в конструкторе и представляет собой System.Net.Http.HttpClient.
Кто-нибудь знает, как переопределить обычные протоколы для HttpClient и заставить его выполнять вызов как вызов GET, но с содержимым, содержащим мой запрос для сервера?
HttpClient
, и мне кажется, что довольно сложно избежать его проверки без необходимости массово переписывать много кода. Можете ли вы рассмотреть возможность использованияWebRequest
? - person Matteo Umili   schedule 30.09.2015Development at its finest!
Умышленное нарушение одной из основных спецификаций всей WWW на протяжении более 15 лет без уважительной причины? Больше похоже на разработку в худшем ее проявлении! мне... - person Stephen Cleary   schedule 30.09.2015HttpWebRequest
, и даже здесь довольно сложно избежать проверки глагола - person Matteo Umili   schedule 30.09.2015