编辑:请注意,我知道问题的核心在于我需要与之通信的服务没有遵循协议。这是我无法接触并且不会很快更改的软件。因此,我需要帮助规避问题并突破协议。开发工作正是如此!
我正在尝试与外部服务通信。制造它的人决定将各种调用分成不同的文件夹和HTTP请求类型。问题在于,我需要发送一个包含内容的GET请求。
是的,这违反了协议。 是的,如果我使用Linux命令进行调用,它将起作用。 是的,如果我在Fiddler中手动制作呼叫,它可以起作用(虽然Fiddler对协议的违反感到愤怒)
当我制作我的呼叫时,它被包装在异步方法中。然而,发送它会导致错误:
“mscorlib.dll”中引发异常:“System.Net.ProtocolViolationException”(“无法使用此动词类型发送内容主体。”)
呼叫代码:
/// <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
吗? - Matteo Umili