【问题标题】:HttpClient not reaching urlHttpClient 没有到达 url
【发布时间】:2017-02-23 15:07:53
【问题描述】:

我正在编写一个通过 REST API 读取和发送数据的 WP8.1 应用程序。 除了“搜索”之外,它们都可以正常工作。

这个 API 在 POST 中工作,我需要发送一个 Json 格式的字符串来定义我的查询。如果我只设置了几个过滤器,REST API 响应时间就会太长。因此,HttpResponseMessage 对象没有成功代码,它返回“NotFound”消息,即使 Web API 正在正确运行。

如果我通过 Postman 尝试相同的请求,它可以正常工作,但如果我通过 SoapUi 尝试,我会收到“java.net.SocketTimeoutException: Read timed out”错误消息。

在 SoapUi 中,我设法延长超时时间以获得响应,但即使我将 TimeOut 属性设置为 HttpClient 对象,我的 C# 代码仍然无法工作。

有人可以帮我解决我的问题吗? 谢谢!

编辑 代码很简单:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.ExpectContinue = false;
client.Timeout = TimeSpan.FromSeconds(300);

HttpContent content = new StringContent(json, Encoding.Unicode, "application/json");
HttpResponseMessage response = await client.PostAsync(uri, content));

if (response.IsSuccessStatusCode)
{
    string jsonResponse = await response.Content.ReadAsStringAsync();
}

【问题讨论】:

  • 您需要提供有关您在做什么的更多详细信息(例如一段代码),否则将很难知道可能是什么问题
  • @ElmerDantas 代码已添加
  • 尝试使用new StringContent(json.ToString(), Encoding.UTF8, "application/json");..也尝试使用client.BaseAddress = new Uri(baseAddress)client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));属性。
  • 我发布的代码是一些测试的结果:起始代码与您建议的相同,带有 Encoding.UTF8 且没有 ExpectContinue 属性。
  • 我明白了...我注意到另一件事...在您的PostAsync 中,您使用的是uri 不是baseAddress(或正确的url)吗?

标签: c# rest web windows-phone-8


【解决方案1】:

我知道这可能不喜欢你,但你试过RestSharp 吗?出于某种原因,在这种特殊情况下,当我需要通过 POST 发送信息时,HTTPClient 无法按预期工作,并且“内容”信息被设置为 uri 而不是正文的一部分。

等效的代码块可能是这样的:

var client = new RestClient("http://example.com");
var request = new RestRequest("resource/{id}", Method.POST);
request.AddParameter("name", "value"); 

// execute the request
IRestResponse response = client.Execute(request);

client.ExecuteAsync(request, response => {
     Console.WriteLine(response.Content);
});

【讨论】:

  • 尝试在我的项目上安装 RestSharp 时出错,与此处相同的错误:link
  • 你必须从这个链接安装这个库:RestSharp.Portable HttpClient:nuget.org/packages/FubarCoder.RestSharp.Portable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
相关资源
最近更新 更多