C# 超时错误:HttpClient POST
使用带有Accept、ContentType和Authentication作为标头的http客户端进行POST时遇到问题。我尝试了几个使用send-aysnc和post-async的实现,但都失败了。我曾经确定它是否也有超时错误,但它正在工作,返回json数据 当运行下面的代码时,我得到一个连接超时错误异常(在:C# 超时错误:HttpClient POST,c#,rest,http-headers,httpclient,http-authentication,C#,Rest,Http Headers,Httpclient,Http Authentication,使用带有Accept、ContentType和Authentication作为标头的http客户端进行POST时遇到问题。我尝试了几个使用send-aysnc和post-async的实现,但都失败了。我曾经确定它是否也有超时错误,但它正在工作,返回json数据 当运行下面的代码时,我得到一个连接超时错误异常(在:var response=wait client.SendAsync(request);) 另外,我还有一个curl命令,我正试图使用它,下面也列出了它 实施: // Body
var response=wait client.SendAsync(request);
)
另外,我还有一个curl命令,我正试图使用它,下面也列出了它
实施:
// Body
var dictionary = new Dictionary<string, string>();
dictionary.Add("id", "123");
var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("id", "123"));
// Http Client
var client = new HttpClient();
client.BaseAddress = new Uri("https://www.some_website.com/api/house");
// Http Request
var request = new HttpRequestMessage(HttpMethod.Post, "https://www.some_website.com/api/house");
// Accept
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Content-Type
//request.Content = new FormUrlEncodedContent(dictionary);
var httpContent = new StringContent(
JsonConvert.SerializeObject(
dictionary,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
}),
Encoding.UTF8,
"application/json");
request.Content = new StringContent(
JsonConvert.SerializeObject(
dictionary,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
}),
Encoding.UTF8,
"application/json");
// Authentication
var byteArray = new UTF8Encoding().GetBytes("user" + ":" + "pass");
//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
client.DefaultRequestHeaders.Authorization = header;
// Communication
try
{
var response = await client.SendAsync(request);//PostAsync("https://www.some_website.com/api/house", httpContent);
if (response.IsSuccessStatusCode)
{
var myContent = await response.Content.ReadAsStringAsync();
var deliveryStatus = JsonConvert.DeserializeObject<MyOjbect>(myContent);
}
}
catch (Exception e)
{
//catch error
}
您将BaseAddress和HttpRequestMessage Uri属性都设置为相同的绝对url,它不应该是基地址(例如somewebsite.com)和相对url(例如(api/house)吗。您也可以使用Fiddler telerik.com/Fiddler检查您的请求您将BaseAddress和HttpRequestMessage Uri属性都设置为相同的绝对url,它不应该是基地址(ex.)和相对url(ex.(api/house)?您也可以使用Fiddler检查您的请求。我认为您是正确的。我做了更改,但仍然出现连接超时错误问题已解决!代码是正确的。问题是我正在使用校园wifi,因此我在代理之后。回家使用wifi不会给我超时错误。JimmyH您的建议是o部分如果你能用同样的建议贴出一个答案,我可以把它标记为答案。
curl -i --user user:123 -H Accept:application/json -H content-type:application/json -H cache-control:no-cache -X POST https://www.some_website.com/api/house -H Content-Type: application/json -d '{"id": "123"}'