【问题标题】:HttpClient throws error with the Rest servicesHttpClient 与 Rest 服务引发错误
【发布时间】:2017-11-07 19:51:22
【问题描述】:

我正在尝试从我正在创建的 Web API 调用多个休息服务,但在调用其中一个 Sharepoint 休息服务时出现以下错误

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

下面是使用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;
    }

    ...

我以前从未遇到过这个错误。如果我需要设置超时,任何人都可以建议我

【问题讨论】:

标签: c# rest asp.net-web-api httpclient


【解决方案1】:

试试这个:

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 发出请求之前,必须设置Headers 和BaseAddress。 我还冒昧地将 .Result 更改为 await 因为调用 .Result 是不好的做法,我可以看到这是在异步方法中。

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

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多