2017-09-21 127 views
0

请试试我可能无法使HttpClient.PutAsync方法正常工作。我能够使GetAsync方法正常工作。我也能够在邮递员中成功完成PUT呼叫postman screenshotHttpClient PutAsync挂起问题或404返回

这是我使用的代码,当我找不到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")); 
} 

我说实话不是很熟悉异步,等待,或HttpClient的。我过去使用过HttpWebRequest和WebRequest。我试图用我的旧方法PUT,并没有成功。有人有主意吗?

+2

通过提琴手发送这两个请求,并告诉我们结果。我猜你的请求没有格式化 - > 404。 – burnsi

+0

谢谢@burnsi !!这是相当尴尬的..我应该为https配置提琴手,然后在问这里之前尝试。我的请求URI缺少“/”。所以很自然。我太专注于语法,错过了错字。我很感激帮助,您的评论是正确的,并引导我找到我的问题。如果您将它作为答案发布,我会接受它。 – hackingchemist

回答

2

大多数情况下,当您在这样的任务中收到404时,您的请求URL格式不正确。

提示:

尝试小提琴手同时捕获请求,并将其在原版本进行比较。

Fiddler

+0

这个答案对我在配置fiddler中配置HTTPS很有帮助https://stackoverflow.com/questions/25440877/fiddler-root-certificate-location – hackingchemist