gpt4 book ai didi

c# - MS Exchange Web 服务 API 和 401 未经授权的异常

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:58 25 4
gpt4 key购买 nike

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

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

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

如何识别,是使用带域的用​​户名还是不带域的用户名,因为office365除了带域的用户名(电子邮件地址),其他任何Microsoft outlook webapp都不需要。

exchangeService.Credentials = new WebCredentials("user", "pwd", "domain");

通过使用这个问题是解决了,数据同步到exchange server,但是问题是我们如何处理/检查是使用带域的用​​户名(用于outlook.office365登录)还是不带域的用户名(用于Microsoft outlook webapp登录)

用什么条件/逻辑来判断是office365还是其他域?

最佳答案

使用用户的 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");
}
}

关于c# - MS Exchange Web 服务 API 和 401 未经授权的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com