HttpClient的Rest服务引发错误 [英] HttpClient throws error with the Rest services

查看:121
本文介绍了HttpClient的Rest服务引发错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to call multiple rest services from the Web API I am creating and I am getting the below error while one of the Sharepoint rest service is called

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

This instance has already started one or more requests. Properties can only be modified before sending the first request.

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

Below is the code for calling the rest services using the HttpClient

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

    ...

我以前从未遇到过此错误.任何人都可以建议我是否需要设置超时

I have never encountered this error before. Can anyone please suggest me if I need set the timeout

推荐答案

尝试一下:

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发出请求之前,必须设置

Header和BaseAddress. 我还自由地将.Result更改为await,因为调用.Result的做法不佳,我可以看到这是在异步方法中.

Headers and BaseAddress must be set before you make the request with GetAsync. I also took the liberty to change from .Result to await since calling .Result is poor practice and I can see this is in an async method.

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

You should also read this: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

这篇关于HttpClient的Rest服务引发错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆