Создание собрания команд Microsoft с использованием VB. NET и Microsoft Graph API - PullRequest
0 голосов
/ 21 апреля 2020

Я создал аутентификацию при входе в систему с помощью Microsoft Graph API, что означает, что после входа в систему у меня есть маркер доступа текущего пользователя, вошедшего в систему. Мой следующий шаг - создать собрание Microsoft Teams Meeting от имени текущего пользователя, вошедшего в систему.

Я пытался следовать документации Microsoft Заявки на участие в онлайн-конференциях , где показаны необходимые шаги чтобы достичь этого сценария.

К сожалению, они не предоставили пример того, как этого можно достичь в VB. Net (что не так уж важно, потому что я преобразовал код в VB).

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

Пожалуйста, посмотрите на код ниже:

Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Threading.Tasks
Imports Microsoft.Graph
Imports Microsoft.IdentityModel.Clients.ActiveDirectory
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Public Class _Default
    Inherits Page

    Private Shared httpClient As HttpClient = New HttpClient()
    Private Shared context As AuthenticationContext = Nothing
    Private Shared credential As ClientCredential = Nothing
    Private Shared graphClient As GraphServiceClient
    Private Shared authprovider As IAuthenticationProvider

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Dim code = HttpContext.Current.Request.QueryString("Code")
        If Not Page.IsPostBack Then
            If code <> "" Then
                Dim url = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
                Dim myParameters = "grant_type=authorization_code&code=" & code & "&redirect_uri=https://localhost:4312/&client_id=CLIENTID&client_secret=CLIENTSECRET"
                Dim wb = New WebClient
                wb.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
                Dim response = wb.UploadString(url, "POST", myParameters)
                responseToken.Text = response
                Success.Text = "O365 login successful. Below is the response token"
                Dim SurroundingClass = JsonConvert.DeserializeObject(Of SurroundingClass)(response)


                Dim rss As JObject = JObject.Parse(response)
                Dim token = rss.SelectToken("access_token")
                Dim res = GetUsers(token)



            End If
        End If

    End Sub

    Private Shared Async Function GetUsers(ByVal result As String) As Task(Of String)
        Try
            Dim users As String = Nothing
            Dim querystring As String = "api-version=1.6"
            Dim uri = "https://graph.microsoft.com/v1.0/me"
            httpClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", result)
            httpClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))

            Dim User = GetMeAsync().Result
            Console.WriteLine($"Welcome {User.DisplayName}!\n")

            Dim getResult = Await httpClient.GetAsync(uri)

            If getResult.Content IsNot Nothing Then
                users = Await getResult.Content.ReadAsStringAsync()
            End If

            Return users
        Catch ex As Exception
            Throw ex
        End Try
    End Function

      Protected Sub tes_Click(sender As Object, e As EventArgs)
        Try

            'Dim fr As System.Net.HttpWebRequest
            Dim client_id = ""// App Client ID'
            Dim uri = "https://localhost:4312/"

            Dim targetURI As String = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=" & client_id &
                                     "&redirect_uri=" & uri & "&response_type=code&scope=openid+Mail.Read"
            Response.Redirect(targetURI)

        Catch ex As System.Net.WebException
            'Error in accessing the resource, handle it
        End Try
    End Sub

       Public Shared Async Function CreateMeeting() As Task(Of OnlineMeeting)

    Try
        graphClient = New GraphServiceClient(authprovider)

        Dim onlineMeeting = New OnlineMeeting With {
            .StartDateTime = DateTimeOffset.Parse("2020-04-23T21:33:30.8546353+00:00"),
            .EndDateTime = DateTimeOffset.Parse("2020-04-23T22:03:30.8566356+00:00"),
            .Subject = "Application Token Meeting",
            .Participants = New MeetingParticipants With {
            .Organizer = New MeetingParticipantInfo With {
            .Identity = New IdentitySet With {
                .User = New Identity With {
                    .Id = "MYID"
                }
            }
        }
    }
}

        Dim encodings As New UTF8Encoding
        Dim serializer As New JavaScriptSerializer()
        Dim arrayJson As String = serializer.Serialize(onlineMeeting)
        Dim result As String = Nothing

        Dim postRequest As HttpWebRequest = DirectCast(WebRequest.Create("https://graph.microsoft.com/v1.0/me/onlineMeetings"), HttpWebRequest)
        postRequest.Method = "POST"
        postRequest.ContentType = "application/json"
        httpClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", Token)

        If postRequest.Method = "POST" Then

            Dim parsedContent As String = JsonConvert.SerializeObject(onlineMeeting)
            Dim encoding As ASCIIEncoding = New ASCIIEncoding()
            Dim bytes As Byte() = encoding.GetBytes(parsedContent)
            Dim newStream As Stream = postRequest.GetRequestStream()
            newStream.Write(bytes, 0, bytes.Length)
            newStream.Close()

        End If

        Dim createMeetings = Await graphClient.Communications.OnlineMeetings.Request().AddAsync(onlineMeeting)

        Console.WriteLine("The meeting has been created")

        Return createMeetings

    Catch ex As ServiceException

        Console.WriteLine($"Error while creating the meeting: {ex.Message}")
        Return Nothing
    End Try

End Function

  Public Sub InvokeMeeting(sender As Object, e As EventArgs)


    Try
        Dim testing = CreateMeeting()


    Catch ex As Exception

    End Try

    End Sub

PS: я добавил разрешение, необходимое для вызова этого API, чтобы иметь возможность создавать собрание команд.

Есть предложения о том, как добиться следующего сценария?

Любая помощь будет в значительной степени оценили. Спасибо!

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