2017-04-04 131 views
4

我想通过their API发送PUT请求更新Saucelabs的作业。但是,下面的代码挂起,我不知道为什么。通过HttpClient发送PUT请求到Saucelabs没有响应

using (var client = new HttpClient()) 
{ 
    var sessionId = Browser.Driver.GetSessionId(); 
    var uri = new Uri($"https://saucelabs.com/rest/v1/{Configuration.SauceUserName}/jobs/{sessionId}"); 
    var uriWithCred = 
     new UriBuilder(uri) 
     { 
      UserName = $"{Configuration.SauceUserName}", 
      Password = $"{Configuration.SauceAccessKey}" 
     }.Uri; 
    var payload = new StringContent($"{{\"name\":\"{TestMethodName}\"}}", Encoding.UTF8, "application/json"); 
    var request = new HttpRequestMessage 
    { 
     Method = HttpMethod.Put, 
     RequestUri = uriWithCred, 
     Content = payload 
    }; 
    var response = client.SendAsync(request).Result;     
} 

以下cUrl请求成功(当然是编辑凭据)。

curl -X PUT -s -u <username>:<access-key> 
-d "{\"name\": \"test name\"}" 
https://saucelabs.com/rest/v1/<username>/jobs/<job-id> 

为什么这个请求挂起,我能做些什么,使之成功?

由于与问题无关的原因,在设置WebDriver的功能时,我无法设置作业的名称。

+0

假设它挂在等待响应,你用菲德勒(或任何其他工具)对你的代码比较两个请求的报头(VS cUrl作者? – yonisha

回答

3

为什么这个请求挂起,我该怎么做才能使它成功?

最有可能是在client.SendAsync方法异步和阻塞调用像.Result这可能会导致死锁或者你把它,原因代码挂的混合。

考虑使用await一直使该方法调用异步。

public async Task CallAPIAsync() {  
    using (var client = new HttpClient()) { 
     var sessionId = Browser.Driver.GetSessionId(); 
     var uri = new Uri($"https://saucelabs.com/rest/v1/{Configuration.SauceUserName}/jobs/{sessionId}"); 
     var uriWithCred = 
      new UriBuilder(uri) { 
       UserName = $"{Configuration.SauceUserName}", 
       Password = $"{Configuration.SauceAccessKey}" 
      }.Uri; 
     var payload = new StringContent($"{{\"name\":\"{TestMethodName}\"}}", Encoding.UTF8, "application/json"); 
     var request = new HttpRequestMessage { 
      Method = HttpMethod.Put, 
      RequestUri = uriWithCred, 
      Content = payload 
     }; 
     var response = await client.SendAsync(request); 

     var content = await response.Content.ReadAsStringAsync(); 
    } 
} 
+0

这为我工作,谢谢!我不在.NET中有任何异步机制的实际经验,你有任何链接或资源,你推荐? – Muttonchop

+1

@Muttonchop,这是我开始与async/await。作者是一个权威的主题。 msdn.microsoft.com/en-us/magazine/jj991977.aspx – Nkosi