C# &引用;等待authenticationContext.AcquireTokenAsync";在Restful API中调用时未运行
很抱歉标题不好,但我没有收到错误,它只是没有运行 我正在尝试向我们的Dynamics 365进行身份验证,以获取访问令牌,以便使用Dynamics API发送数据 当从普通的MVC项目站点运行时,下面的代码可以正常工作,但是当从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
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);