Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HttpClient向Saucelabs发送PUT请求未响应_C#_.net_Rest_Selenium Webdriver_Remotewebdriver - Fatal编程技术网

C# 通过HttpClient向Saucelabs发送PUT请求未响应

C# 通过HttpClient向Saucelabs发送PUT请求未响应,c#,.net,rest,selenium-webdriver,remotewebdriver,C#,.net,Rest,Selenium Webdriver,Remotewebdriver,我正试图通过发送PUT请求来更新作业。但是,下面的代码挂起,我不知道为什么 using (var client = new HttpClient()) { var sessionId = Browser.Driver.GetSessionId(); var uri = new Uri($"https://saucelabs.com/rest/v1/{Configuration.SauceUserName}/jobs/{sessionId}"); var uriWithCr

我正试图通过发送
PUT
请求来更新作业。但是,下面的代码挂起,我不知道为什么

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:
-d“{\'name\”:\“test name\”}”
https://saucelabs.com/rest/v1//jobs/
为什么此请求挂起?我可以做些什么使其成功?

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

为什么此请求挂起?我可以做些什么使其成功

最有可能的是,在
客户机上混合了异步和阻塞调用,如
.Result
。SendAsync
方法可能会导致死锁,或者如您所说,会导致代码挂起

考虑使用
wait
使方法调用始终异步

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();
    }
}

假设它挂起等待响应,您是否使用Fiddler(或任何其他工具)来比较两个请求的头(你的代码与cUrl?这对我来说很有效,谢谢!我对.NET中的异步机制没有任何实际经验,你有什么推荐的链接或资源吗?@Muttonchop,这就是我开始使用async/await的地方。作者是该主题的权威。