让 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() 调用该方法。