【发布时间】:2018-12-05 02:43:09
【问题描述】:
以下代码在控制台应用程序中运行。
public Boolean Graph_IsMemberOfGroup(string Parm_AzureUserID, string Parm_GroupID) {
Boolean Lcl_ReturnValue = false;
Task<string> Lcl_Response = GraphPriv_IsMemberOfGroup(Parm_AzureUserID, Parm_GroupID);
if (Lcl_Response.Result != null) {
Lcl_ReturnValue = Lcl_Response.Result.Contains(Parm_GroupID);
}//end if
return (Lcl_ReturnValue);
}
private async Task<string> GraphPriv_IsMemberOfGroup(string Parm_AzureUserID, string Parm_GroupID) {
string Lcl_Returnvalue = null;
var Lcl_Uri = "https://graph.windows.net/CleMetroSchools.onmicrosoft.com/users/" + Parm_AzureUserID.Trim() + "/checkMemberGroups?api-version=1.6";
string Lcl_RequestBody = @"{""groupIds"": [""" + Parm_GroupID.Trim() + @"""]}";
Global_HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Global_Token.Result);
HttpResponseMessage Lcl_PostResult = await Global_HttpClient.PostAsync(Lcl_Uri, new StringContent(Lcl_RequestBody, Encoding.UTF8, "application/json"));
if (Lcl_PostResult.Content != null) {
Lcl_Returnvalue = await Lcl_PostResult.Content.ReadAsStringAsync();
}//end if
return Lcl_Returnvalue;
}
我用的电话是
if (Graph_IsMemberOfGroup(CurrentUser,Group)){
我遇到的问题是,当我在普通(非 MVC)ASP.net Web 应用程序中使用相同的代码时。系统在尝试处理 if (Lcl_Response.Result != null) {
之前不会等待 GraphPriv_IsMemberOfGroup 完成到目前为止我尝试过的任何等待都不会编译或永远等待。 我已经找了好几天了,我所能做的就是深入到混乱的兔子洞里去。
【问题讨论】:
-
如果完全相同的代码在 ASP.NET 应用程序中工作,那纯属运气。看看Asynchronous programming with async and await
-
当您调用
GraphPriv_IsMemberOfGroup时,您没有使用await...尝试在Task<string> Lcl_Response = await GraphPriv_IsMemberOfGroup(Parm_AzureUserID, Parm_GroupID);上添加await -
不过,在使用 async-await 模式之前,您应该遵循 @Stijn 的建议并尝试做更多的研究和培训。
-
我试过 Task
Lcl_Response = await GraphPriv_IsMemberOfGroup(Parm_AzureUserID, Parm_GroupID);但得到编译错误“等待”运算符只能在 asysnc 方法中使用。 -
我已经阅读并重新阅读了异步和等待,但我仍然不确定该怎么做。请理解,自八月以来我一直在努力解决这个问题。我无法告诉你我花了多少小时观看 youtube 视频和阅读网页试图弄清楚如何做一件事。 (验证用户是否是 AD 组的成员)我阅读的大部分内容要么已经过时,要么只有 sn-ps 代码,而忽略了很多重要部分。
标签: c# asp.net azure-ad-graph-api