c# - 如何验证传递给 NetworkCredential 构造函数以用于 EWS 的凭据?
问题描述
有没有一种方法可以验证传递给System.Net.NetworkCredential
类的凭据?我想确保对 Exchange Web 服务的调用是有效的,这样调用才能正常工作。
这是示例代码:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(user_id, password);
//how to validate credentials here?
service.Url = new System.Uri("some_url");
Microsoft.Exchange.WebServices.Data.Appointment meeting1 = new Microsoft.Exchange.WebServices.Data.Appointment(service);
//add some extra stuff to the meeting object
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
Microsoft.Exchange.WebServices.Data.Mailbox test = new Microsoft.Exchange.WebServices.Data.Mailbox(email);
Microsoft.Exchange.WebServices.Data.FolderId folderid = new Microsoft.Exchange.WebServices.Data.FolderId(WellKnownFolderName.Calendar, test);
meeting1.Save(folderid,SendInvitationsMode.SendToAllAndSaveCopy);
另外,有没有办法检查是否.Save()
真的有效?该函数没有返回值。
解决方案
有没有一种方法可以验证传递给 System.Net.NetworkCredential 类的凭据?
这些是 Active Directory 凭据,因此如果您想验证它们,您可以查看类似Validate a username and password against Active Directory?.EWS 不提供任何凭据验证方法,如果它们不正确则仅返回 401。
另外,有没有办法检查 .Save() 是否真的有效?该函数没有返回值
如果从服务器接收到无效响应,则会引发异常,因此在这种情况下,您应该至少在保存周围有一个 try/catch(异常可以是基于请求或响应的)。如果在您的示例中成功创建会议,则 meeting1 对象现在将在其 Id 属性中具有基础 Id。