代码之家  ›  专栏  ›  技术社区  ›  xyz

HttpClient对Rest服务抛出错误

  •  2
  • xyz  · 技术社区  · 8 年前

    我试图从我正在创建的Web API中调用多个rest服务,当调用一个Sharepoint rest服务时,出现以下错误

    此实例已启动一个或多个请求。只能在发送第一个请求之前修改属性。

    下面是使用HttpClient调用rest服务的代码

    try
    {
        var credential = new NetworkCredential(userName_SP, password_SP, domain_SP);
        var myCache = new CredentialCache();
        myCache.Add(new Uri(core_URL), "NTLM", credential);
    
        var handler = new HttpClientHandler();
        handler.AllowAutoRedirect = true;
        handler.Credentials = myCache;
    
        using (var client_sharePoint = new HttpClient(handler))
        {
            var response = client_sharePoint.GetAsync(core_URL).Result;
            client_sharePoint.BaseAddress = uri;
            client_sharePoint.DefaultRequestHeaders.Accept.Clear();
            client_sharePoint.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
    
            var responsedata = await response.Content.ReadAsStringAsync();
            var returnObj = JsonConvert.DeserializeObject<SharepointDTO.RootObject>(
                responsedata);
    
            return returnObj;
        }
    
        ...
    

    我以前从未遇到过这个错误。如果我需要设置超时,谁能建议我吗

    1 回复  |  直到 8 年前
        1
  •  2
  •   Allrameest    8 年前

    试试这个:

    var credential = new NetworkCredential(userName_SP, password_SP, domain_SP);
    var myCache = new CredentialCache();
    myCache.Add(new Uri(core_URL), "NTLM", credential);
    
    var handler = new HttpClientHandler();
    handler.AllowAutoRedirect = true;
    handler.Credentials = myCache;
    
    using (var client_sharePoint = new HttpClient(handler))
    {
        client_sharePoint.BaseAddress = uri;
        client_sharePoint.DefaultRequestHeaders.Accept.Clear();
        client_sharePoint.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
        var response = await client_sharePoint.GetAsync(core_URL);
    
        var responsedata = await response.Content.ReadAsStringAsync();
        var returnObj = JsonConvert.DeserializeObject<SharepointDTO.RootObject>(
            responsedata);
    
        return returnObj;
    }
    

    在使用发出请求之前,必须先设置标头和基址 GetAsync . 我还自由地改变了。呼叫后等待的结果。结果是实践不佳,我可以看出这是在一个异步方法中。

    您还应该阅读以下内容: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/