MS Exchange Web服务API和401未经授权的例外

时间:2015-08-20 10:17:22

标签: c# asp.net exchangewebservices

我正在使用日历事件同步过程,但仍停留在一个级别并需要您的帮助, 我正在使用

来验证Web凭据 exchangeService.Credentials = new WebCredentials(" user @ domain"," pwd");

通过使用此功能,我可以将日历应用与我的office365帐户同步。但配置其他Microsoft Exchange帐户时出现问题。

如何识别,是否使用域名或用户名而不使用域名,因为office365除了具有域名(电子邮件地址)的用户名,其他任何Microsoft Outlook webapp都不需要。

exchangeService.Credentials =新的WebCredentials("用户"," pwd","域");

通过使用此问题解决,数据与Exchange服务器同步,但问题是 我们如何处理/检查是否使用域名用户名(用于outlook.office365登录)或不带域名的用户名(用于Microsoft Outlook webapp登录)

使用哪种条件/逻辑来识别它是office365还是其他域?

1 个答案:

答案 0 :(得分:0)

使用用户的UPN同时适用于OnPremise和Office365,因此这是使用其仅使用在Office365中工作的低级用户名的最佳方法https://msdn.microsoft.com/en-us/library/windows/desktop/aa380525(v=vs.85).aspx#down_level_logon_name

(不要将UPN与电子邮件地址混淆,这些通常是不同的OnPremise,而在Office365中通常是相同的。)

您还可以使用自动发现来检测用户是否正在使用Office365(但是这仍需要进行身份验证,例如

        AutodiscoverService adAutoDiscoverService = new AutodiscoverService(ExchangeVersion.Exchange2013_SP1);
        adAutoDiscoverService.Credentials = new NetworkCredential("UserName", "Password");
        adAutoDiscoverService.EnableScpLookup = false;
        adAutoDiscoverService.RedirectionUrlValidationCallback = adAutoDiscoCallBack;
        adAutoDiscoverService.PreAuthenticate = true;
        adAutoDiscoverService.TraceEnabled = true;
        adAutoDiscoverService.KeepAlive = false;            
        GetUserSettingsResponse gsp = adAutoDiscoverService.GetUserSettings("username@domain.com", UserSettingName.UserMSOnline);
        Object UserMSOnline = null;
        if (gsp.Settings.TryGetValue(UserSettingName.UserMSOnline, out UserMSOnline))
        {
            if ((String)UserMSOnline == "True")
            {
                Console.WriteLine("Office365");
            }
        }