C# &引用;等待authenticationContext.AcquireTokenAsync";在Restful API中调用时未运行

C# &引用;等待authenticationContext.AcquireTokenAsync";在Restful API中调用时未运行,c#,asp.net-mvc,rest,async-await,dynamics-crm,C#,Asp.net Mvc,Rest,Async Await,Dynamics Crm,很抱歉标题不好,但我没有收到错误,它只是没有运行 我正在尝试向我们的Dynamics 365进行身份验证,以获取访问令牌,以便使用Dynamics API发送数据 当从普通的MVC项目站点运行时,下面的代码可以正常工作,但是当从API调用时,它就不工作了 以下是全部功能: public string TAF_SendDataToCRM(JObject AppJSON) { Task<String> IDTask = AuthenticateWithCRM(Ap

很抱歉标题不好,但我没有收到错误,它只是没有运行

我正在尝试向我们的Dynamics 365进行身份验证,以获取访问令牌,以便使用Dynamics API发送数据

当从普通的MVC项目站点运行时,下面的代码可以正常工作,但是当从API调用时,它就不工作了

以下是全部功能:

public string TAF_SendDataToCRM(JObject AppJSON)
    {
        Task<String> IDTask = AuthenticateWithCRM(AppJSON);

        string ID = ApplicationIDTask.ToString();

        return ID;
    }

public async Task<String> AuthenticateWithCRM(JObject AppJSON)
        {
            ClientCredential clientcred = new ClientCredential(clientId, appKey);
            AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantID);
            AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(organizationUrl, clientcred);
            using (HttpClient httpClient = new HttpClient())
            {
                httpClient.BaseAddress = new Uri(organizationUrl);
                httpClient.Timeout = new TimeSpan(0, 2, 0);  // 2 minutes  
                httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
                httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
                httpClient.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                httpClient.DefaultRequestHeaders.Authorization =
                    new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);

                HttpResponseMessage CreateResponse = await SendAsJsonAsync(httpClient, HttpMethod.Post, "api/data/v8.2/crimson_whdapplications", AppJSON);

                Guid applicationID = new Guid();
                if (CreateResponse.IsSuccessStatusCode)
                {
                    string applicationUri = CreateResponse.Headers.GetValues("OData-EntityId").FirstOrDefault();
                    if (applicationUri != null)
                        applicationID = Guid.Parse(applicationUri.Split('(', ')')[1]);
                    return applicationID.ToString();
                }
                else
                {
                    return null;
                }
            }
        } 
此时,它将不会到达下一行,但将返回到调用它的函数,并且在IDTask中将包含:
'Id=38,Status=WaitingForActivation,Method=“{null}”,Result=“{not not computed}”
并且在转换为字符串时包含:'System.Threading.Tasks.Task`1[System.string]'

它没有出错,只是到达AuthenticationResult行并放弃了

这与函数是一个
async
调用以及使用
await
的身份验证结果有关吗?该函数在Restful API调用中不起作用

完整的函数可能不相关,但是如果异步/等待是我想知道如何执行此Dynamics API调用的问题,例如在使用
中,另一个
wait
用于
HttpResponseMessage
它是

返回函数

因为任务。您必须更改此行:

 Task<String> IDTask = AuthenticateWithCRM(AppJSON);
您必须等待异步操作,但目前您正在尝试处理仍在进行中的任务。 只需添加wait,您就可以处理此“AuthenticateWithCRM(AppJSON)”操作的结果

“TAF_SendDataToCRM”也应该是异步的。如果您想从Asyn调用中获得任何好处,则此树中的每个方法都应该是异步的。 或者在您的TAF_SendDataToCRM方法中以同步方式运行此代码

 Task<String> IDTask = AuthenticateWithCRM(AppJSON);
var IDTask = await AuthenticateWithCRM(AppJSON);