System.Threading.Tasks.Task`1.GetResultCore

时间:2019-01-07 10:29:10

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

我正在使用HTTPClient调用简单的Web Api服务。该服务接受一个参数,例如URL,并将其保存在SQL表中,将该URL转换为guid,并将其返回给调用方。下面的代码在SharePoint Web部件内使用,可通过按钮单击事件处理程序进行调用。

public void DisplayUrl(string host,string paramUrl)
        {
            string longUrl = string.Format("https://{0}-UrlApi/AddUrl?longUrl={1}", host,paramUrl);
            var result = GetUrl(longUrl).GetAwaiter().GetResult();
            tboxResults.Text = result.ShortUrl;
        }

protected static async Task<ShortUrlResponse> GetUrl(string baseUrl)
{
    HttpClientHandler handler = new HttpClientHandler();
    handler.UseDefaultCredentials = true;

    using (var client = new HttpClient(handler))
    {

        var response = client.GetAsync(baseUrl).Result;
        if (response.IsSuccessStatusCode)
        {
            HttpResponseMessage response1 = response;
            response.EnsureSuccessStatusCode();
            var resp = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<ShortUrlResponse>(resp);
            return result;

        }
        return null;
    }

}

该Web部件已部署到测试环境,并且当我从测试服务器外部的计算机中的浏览器中打开页面时,出现此错误。有时我也将其放入测试服务器中,但是第二次单击按钮后,它可以正常工作,例如在开发机器中无法正常工作。

这是我得到的错误。

  

错误消息:发生一个或多个错误。
  InnerException:   System.Net.Http.HttpRequestException:发送请求时发生错误。 ---> System.Net.WebException:远程服务器   返回错误:(401)未经授权。 ->   System.ComponentModel.Win32Exception:登录尝试在以下位置失败   System.Net.NTAuthentication.GetOutgoingBlob(Byte [] entryBlob,   布尔throwOnError,SecurityStatus&statusCode)   System.Net.NTAuthentication.GetOutgoingBlob(字符串传入Blob)位于   System.Net.NegotiateClient.DoAuthenticate(字符串挑战,WebRequest   webRequest,ICredentials凭据,布尔值preAuthenticate)位于   System.Net.NegotiateClient.Authenticate(字符串挑战,WebRequest   webRequest,ICredentials凭据)   System.Net.AuthenticationManagerDefault.Authenticate(字符串质询,   WebRequest请求,ICredentials凭证)位于   System.Net.AuthenticationState.AttemptAuthenticate(HttpWebRequest   httpWebRequest,ICredentials authInfo),网址为   System.Net.HttpWebRequest.CheckResubmitForAuth()位于   System.Net.HttpWebRequest.CheckResubmit(Exception&e,Boolean&   disableUpload)-内部异常堆栈跟踪结束--在   System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)位于   System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)   ---内部异常堆栈跟踪结束

     

StackTrace:

     

在System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)

     

TUrlControl:
  在System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)处
  在AIntranet.WebParts.TUrl.TUrlUserControl.d__3.MoveNext()

     

从上一个引发异常的位置开始的堆栈跟踪结束

     

在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task   任务)
       在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       在AIntranet.WebParts.TUrl.TUrlUserControl.DisplayUrl(字符串主机,字符串paramUrl)
       在AIntranet.WebParts.TUrl.TUrlUserControl.b__1_0()
       在Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated   secureCode)
       在Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback   secureCode,对象参数)
       在Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated   secureCode)
       在AIntranet.WebParts.TUrl.TUrlUserControl.btnTUrl_Click(Object sender,EventArgs e)

0 个答案:

没有答案