HttpClient的Rest服务引发错误 [英] HttpClient throws error with the Rest services
问题描述
我试图从正在创建的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屋!