【问题标题】:Outlook API Using Refresh Token in Console ApplicationOutlook API 在控制台应用程序中使用刷新令牌
【发布时间】:2016-12-02 01:31:00
【问题描述】:

我有一个网站,允许用户使用 v2 API 将他们在我们系统中的日历与 Outlook 日历同步。

当用户点击我们网络应用程序上的按钮时,一切正常,我们收到刷新令牌并将其存储在我们的数据库中。

我们有一个控制台应用程序,它设置为定期运行以同步用户,因此他们无需单击按钮。

当我在等待响应的任何时候尝试调用 API 时,控制台应用程序会立即关闭。

以下是从用户日历中获取事件的代码。应用程序在“dim response”行关闭。

    Public Shared Async Function FetchEventList(CalendarID As String, StartDate As String, EndDate As String, Token As String) As Task(Of EventListResponse)
        Dim EventResposne = New EventListResponse()
        Try
            Dim data As String = Token
            Dim baseUri As String = Convert.ToString("https://outlook.office.com/api/v2.0/me/calendars/") & CalendarID & "/calendarview?startDateTime=" & StartDate & "&endDateTime=" & EndDate

            Dim client = New HttpClient()
            client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", Convert.ToString("=") & data)

            Dim response = Await client.GetAsync(baseUri)
            Dim result = Await response.Content.ReadAsStringAsync()
            EventResposne = Newtonsoft.Json.JsonConvert.DeserializeObject(Of EventListResponse)(result)
        Catch ex As Exception
        End Try
        Return EventResposne
    End Function

我缺少什么以及如何解决?

任何帮助将不胜感激。

【问题讨论】:

    标签: vb.net oauth outlook console async-await


    【解决方案1】:

    事实证明,问题在于控制台应用程序上的等待不起作用。将其更改为调用结果可以正常工作。

    所以这段代码有效:

        Public Shared Function FetchEventList(CalendarID As String, StartDate As String, EndDate As String, Token As String) As EventListResponse
            Dim EventResposne = New EventListResponse()
            Try
                Dim data As String = Token
                Dim baseUri As String = Convert.ToString("https://outlook.office.com/api/v2.0/me/calendars/") & CalendarID & "/calendarview?startDateTime=" & StartDate & "&endDateTime=" & EndDate
    
                Dim client = New HttpClient()
                client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", Convert.ToString("=") & data)
    
                Dim response = client.GetAsync(baseUri).Result
                Dim result = response.Content.ReadAsStringAsync().Result
                EventResposne = Newtonsoft.Json.JsonConvert.DeserializeObject(Of EventListResponse)(result)
            Catch ex As Exception
            End Try
            Return EventResposne
        End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-26
      • 2016-09-19
      • 2014-08-06
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2014-03-09
      • 2014-10-26
      相关资源
      最近更新 更多