HttpClient PutAsync问题挂起或404返回

时间:2017-09-21 17:55:36

标签: c# .net asp.net-web-api put dotnet-httpclient

尽我所能,我无法让HttpClient.PutAsync方法正常工作。我能够使GetAsync方法正常工作。我也能够在Postman postman screenshot

中成功进行PUT调用

这是我在找不到404时使用的代码。

 public static async Task<HttpResponseMessage> PutAsJsonAsync<Contact>(HttpClient client, Contact contact)
{
client.DefaultRequestHeaders.Add("X-API-TOKEN","MyT0k3n"); 
var json = JsonConvert.SerializeObject(contact);    
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
return await client.PutAsync("https://survey.qualtrics.com/API/v3/mailinglists/ML_123456/contacts/MLRP_123456", stringContent);

}

Contact类包含诸如“unsubscribed”之类的变量。

我也试过这个(https://gist.github.com/alexandrevicenzi/9216739),但是当我等待任务时,线程挂起并超时:

public static Task<HttpResponseMessage> PutJsonAsync(HttpClient client, string requestUri, Type type, object value)
{

    return client.PutAsync(requestUri, new ObjectContent(type, value, new JsonMediaTypeFormatter(), "application/json"));
}

老实说,我对async,await或HttpClient并不是很熟悉。我过去使用过HttpWebRequest和WebRequest。我尝试使用旧方法进行PUT并且没有成功。有人有主意吗?

1 个答案:

答案 0 :(得分:2)

大多数情况下,当您在此类任务中收到404时,您的请求网址格式不正确。

提示:

尝试fiddler捕获这两个请求并在原始版本中进行比较。

Fiddler