msgraph-sdk-go仅响应odata上下文,而不是数据本身

kx5bkwkv  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(164)

我想使用Golang Graph SDK请求一个用户的日历,但我只是得到随机的Odata值作为响应,而不是Json或其他格式。
首先,我使用Github上的官方文档和问题进行了连接和请求:

package main

import (
    "context"
    "fmt"
    azidentity "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    a "github.com/microsoft/kiota-authentication-azure-go"
    msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
    cv "github.com/microsoftgraph/msgraph-sdk-go/users/item/calendarview"
)

func main() {
    cred, err := azidentity.NewClientSecretCredential(
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        nil,
    )
    auth, err := a.NewAzureIdentityAuthenticationProviderWithScopes(cred, []string{"https://graph.microsoft.com/.default"})

    adapter, err := msgraphsdk.NewGraphRequestAdapter(auth)
    
    client := msgraphsdk.NewGraphServiceClient(adapter)
    if err != nil {
        fmt.Println("Fehler: ", err)
    }
    requestStartDateTime := "2022-11-01T00:00:00"
    requestEndDateTime := "2022-11-17T00:00:00"
    query := cv.CalendarViewRequestBuilderGetQueryParameters{
        // Orderby: []string{"start/dateTime"},
        StartDateTime: &requestStartDateTime,
        EndDateTime: &requestEndDateTime,
        Select: []string{
            "subject",
            "start",
            "end",
        },
    }
    
    options := cv.CalendarViewRequestBuilderGetRequestConfiguration{
        QueryParameters: &query,
    }
    _ = options
    result, err := client.UsersById("redacted@domain.com").CalendarView().Get(context.Background(), &options)
    if err != nil {
        // const colorRed = "\033[0;31m"
        fmt.Println(err)
    }
    fmt.Println(result)

}

我只得到这样的回应

&{{map[@odata.context:0xc0002310d0] <nil> 0xc00043c030} [0xc0003da310 0xc0003da120 0xc0001daa11 0xc0001dad20 0xc0003dbf01 0xc0003db110 0xc0003da401 0xc0003db681 0xc0003da901 0xc0003daa81]}

我期待的是一个Json输出,而不是随机odata上下文值。是否有什么明显的东西我错过了?如果我改变了StartDateTime和EndDateTime,Oxc....值的计数会改变。

8yoxcaq7

8yoxcaq71#

您不应该按原样访问result对象,因为您在无法正确导航其属性的情况下公开了内部struct响应详细信息。
您应该使用GetValue来检索响应,它将返回一个Eventable对象切片,您可以在该切片上迭代以获取所需的 calendar 属性:

func main() {
    // code omitted as being unchanged
    // ...

    _ = options
    result, err := client.UsersById("redacted@domain.com").CalendarView().Get(context.Background(), &options)
    if err != nil {
        fmt.Println(err)
    }

    for _, event := range result.GetValue() {
        iCalId := event.GetICalUId()
        startTime := event.GetStart()
        endTime := event.GetEnd()
        fmt.Printf("iCalId: %s | Time: (%s - %s) | \n", *iCalUId, *startTime.GetDateTime(), *endTime.GetDateTime()) // or any other properties
    }
}
u7up0aaq

u7up0aaq2#

我使用了来自@tmarwen的信息,并在代码中添加了另一个变体中的循环:

for _, event := range result.GetValue() {
    fmt.Printf("Subject: %s | Time: (%s - %s) | \n", *event.GetSubject(), *event.GetStart().GetDateTime(), *event.GetEnd().GetDateTime()) // or any other properties
}

相关问题