繁体   English   中英

从Office 365 API获取共享日历

[英]Get shared calendars from Office 365 API

所以,这就是问题所在。 我在整个MSDN上以及在Stack上进行了搜索,但是没有一个明确的答案如何获取(或者甚至有可能在今天?)访问Office365中的共享日历。

我遵循了教程,这是令人讨厌的方法:

public async Task<ActionResult> Index()
    {
        List<MyCalendar> myCalendars = new List<MyCalendar>();

        var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

        AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.Authority, new ADALTokenCache(signInUserId));

        try
        {
            DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(SettingsHelper.DiscoveryServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            var discoveryCapabilitiesResult = await discClient.DiscoverCapabilitiesAsync();

            var dcr = await discClient.DiscoverCapabilityAsync("Calendar");

            OutlookServicesClient exClient = new OutlookServicesClient(dcr.ServiceEndpointUri,
                async () =>
                {
                    var authResult = await authContext.AcquireTokenSilentAsync(dcr.ServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

                    return authResult.AccessToken;
                });

            //var calendarsResult = await exClient.Me.Calendars.ExecuteAsync();

            var calendarsResult = await exClient.Me.Calendars.ExecuteAsync();


            do
            {
                var calendars = calendarsResult.CurrentPage;
                foreach (var c in calendars)
                {
                    myCalendars.Add(new MyCalendar { DisplayName = c.Name });
                }

                calendarsResult = await calendarsResult.GetNextPageAsync();

            } while (calendarsResult != null);
        }
        catch (AdalException exception)
        {
            //handle token acquisition failure
            if (exception.ErrorCode == AdalError.FailedToAcquireTokenSilently)
            {
                authContext.TokenCache.Clear();

                //handle token acquisition failure
            }
        }

        return View(myCalendars);
    }

此功能将仅返回“我的日历”下的日历,而不返回其他日历(参见图片)

多个日历

我只有第一个-我的日历。 与我共享“我的日历”下的第二个(我不是作者,有人与我共享),“共享日历”下的第二个是全公司的(我也有一个) r / w权限)。

有没有办法让所有人都得到? 在portal.azure.com上,添加了我的应用程序,并设置了我的日历和共享日历的权限:

权限

我不知道该怎么做。 联系人工作正常,但是我找不到获取任何共享日历的方法。

根据测试,Microsoft Graph可以获取所有日历。 以下是供您参考:

从chenchenLi到NanYu共享的日历: 在此处输入图片说明

从NanYu查询日历: 在此处输入图片说明

有关获取日历的Microsoft Graph REST的更多详细信息,您可以参考以下链接:

列出日历

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM