让 Microsoft Graph 调用在 .net Web 应用程序中工作时遇到问题
Having a problem getting Microsoft Graph call to work within a .net web application
以下代码在控制台应用程序中运行。
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 完成
到目前为止,我尝试过的任何等待都不会编译或永远等待。
我已经搜索了好几天,我所能做的就是深入混乱的兔子洞。
您在这里误用了 async/await 模型。您不应该寻找 Task<string>
,您应该从等待的方法中寻找 string
:
public async Task<Boolean> Graph_IsMemberOfGroup(string Parm_AzureUserID, string Parm_GroupID) {
Boolean Lcl_ReturnValue = false;
string Lcl_Response = await GraphPriv_IsMemberOfGroup(Parm_AzureUserID, Parm_GroupID);
return Lcl_Response.Result.Contains(Parm_GroupID);
}
异步方法 return 将值包装在 Task<>
中,await
关键字告诉代码等待方法 return 并展开响应。因此,如果异步方法 returns Task<string>
那么您将使用 string s = await method()
调用该方法。
以下代码在控制台应用程序中运行。
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 完成到目前为止,我尝试过的任何等待都不会编译或永远等待。 我已经搜索了好几天,我所能做的就是深入混乱的兔子洞。
您在这里误用了 async/await 模型。您不应该寻找 Task<string>
,您应该从等待的方法中寻找 string
:
public async Task<Boolean> Graph_IsMemberOfGroup(string Parm_AzureUserID, string Parm_GroupID) {
Boolean Lcl_ReturnValue = false;
string Lcl_Response = await GraphPriv_IsMemberOfGroup(Parm_AzureUserID, Parm_GroupID);
return Lcl_Response.Result.Contains(Parm_GroupID);
}
异步方法 return 将值包装在 Task<>
中,await
关键字告诉代码等待方法 return 并展开响应。因此,如果异步方法 returns Task<string>
那么您将使用 string s = await method()
调用该方法。