使用EWS托管API验证登录凭据

D.B*_*D.B 3 c# exchangewebservices office365api

有没有办法验证用户使用EWS托管API提供的登录凭据而不发送电子邮件.我在[ExchangeService]对象上使用AutodiscoverUrl方法但是它需要太长时间?任何建议都会很感激.

        try
        {
            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            service.Credentials = new WebCredentials("xxxx@yyy.com", "password");
            service.AutodiscoverUrl("xxxx@yyy.com", RedirectionUrlValidationCallback);    

            Console.WriteLine("Credentials validated successfully");
            Console.ReadLine();

        }

        catch(Exception e)
        {
            Console.WriteLine(e.Message);
            Console.ReadLine();
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*und 6

提高速度的一种方法,不是很好但是有效,就是自己设置服务URL.首先通过在调试模式下运行autodiscoverurl方法来获取交换服务URL:

在此输入图像描述

然后,不是在服务上运行autodiscoverurl方法,而是添加从autodiscoverurl方法获得的url:

 service.Url = new Uri("https://yourExchangeURL.com/EWS/Exchange.asmx");
Run Code Online (Sandbox Code Playgroud)

您可以在邮件帐户上发出请求(远程检查交换凭据并检查用户是否已登录),而不是调用自动发现来验证用户凭据

var findFolderResults = service.FindFolders(WellKnownFolderName.Root, new SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 0), new FolderView(10));
Run Code Online (Sandbox Code Playgroud)

您的最终代码将如下所示

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("xxxx@yyy.com", "password");
service.Url = new Uri("https://yourExchangeURL.com/EWS/Exchange.asmx");
var findFolderResults = service.FindFolders(WellKnownFolderName.Root, new SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 0), new FolderView(10));
Run Code Online (Sandbox Code Playgroud)