首页 > 解决方案 > System.Threading.Tasks.Task`1.GetResultCore

问题描述

我正在使用 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(String incomingBlob) 在 System.Net.NTAuthentication.GetOutgoingBlob(Byte[] incomingBlob, Boolean throwOnError, SecurityStatus& statusCode) 处失败System.Net.NegotiateClient.Authenticate(String challenge, WebRequest webRequest, ICredentials credentials) at System.Net.AuthenticationManagerDefault.Authenticate(String challenge, WebRequest request, ICredentials 凭证)在系统。

堆栈跟踪:

在 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 task)
在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
在 AIntranet.WebParts.TUrl.TUrlUserControl.DisplayUrl (String host, String paramUrl)
at AIntranet.WebParts.TUrl.TUrlUserControl.b__1_0()
at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
at Microsoft .SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated 安全代码)
在 AIntranet.WebParts.TUrl.TUrlUserControl.btnTUrl_Click(对象发送者,EventArgs e)

标签: c#asynchronousasp.net-web-apitaskhttpclient

解决方案


推荐阅读