Возникла проблема с вызовом Microsoft Graph для работы в веб-приложении .net - PullRequest
0 голосов
/ 03 декабря 2018

Следующий код работает в консольном приложении.

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.Система не ожидает завершения GraphPriv_IsMemberOfGroup, прежде чем попытается обработать if (Lcl_Response.Result! = Null) {

Все, что я до сих пор пробовал с помощью wait, либо не скомпилируется, либо будет ждать вечно.Я искал несколько дней, и все, что мне удалось сделать, это путешествовать глубже по кроличьей норе путаницы.

1 Ответ

0 голосов
/ 04 декабря 2018

Вы неправильно применяете модель асинхронного ожидания.Вам не нужно искать 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);
}

Асинхронный метод возвращает значение, заключенное в Task<>, await Ключевое слово указывает коду дождаться возврата метода и развернуть ответ.Поэтому, если асинхронный метод возвращает Task<string>, вы должны вызвать этот метод, используя string s = await method().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...