【问题标题】:Azure ActiveDirectoryClient inside of MVC application never returnsMVC 应用程序内的 Azure ActiveDirectoryClient 永远不会返回
【发布时间】:2016-09-23 16:51:15
【问题描述】:

我正在编写一个需要在 Azure Active Directory 中创建用户的 MVC 应用程序。我已经将创建用户的代码封装在它自己的库中,它在单元测试中运行良好。但是,当在我的 MVC 控制器中调用相同的代码时,对 AddUserAsync 的调用永远不会返回。作为测试,我改变了我的控制器,以便它只是尝试获取用户而不是创建新用户。控制器看起来像:

   public class RegistrationController : BaseController
   {
        public ActionResult Index()
        {
            AadAccessHelper adHelper = new AadAccessHelper();
            var client = adHelper.AdClient;
            AADUser aadUser = adHelper.GetUserByPrincipalName("AUser@ThisDirectory.onmicrosoft.com");

            return View();
        }
   }

获取用户的帮助类的东西看起来像:

    private async Task<User> GetUserByUserName(ActiveDirectoryClient adClient, string userName)
    {
         var user = await adClient.Users.Where(u => u.UserPrincipalName == userName).ExecuteSingleAsync();
         return (User) user;
    }

      public AADUser GetUserByPrincipalName(string userName)
      {
                   Task<User> user = GetUserByUserName(AdClient, userName);
                   user.Wait(new TimeSpan(0, 1, 0));
                   if (true == user.IsFaulted)
                   {
                                 throw user.Exception;
                   }

                   if (null == user.Result)
                   {
                                 return null;
                   }

                   return MapUserToAADUser(user.Result);
      }

无论我给它多长时间,对 ExecuteSingleAsync 的调用都永远不会返回。我错过了什么?

测试过程是运行 Chrome 中出现的网站(我也使用了两个 IE,结果相同),我导航到注册页面(为了测试目的,我移动了代码)和那是悲伤开始的时候。

再次重申:代码在单元测试中运行时运行良好。我是否需要使用其他客户端而不是 Microsoft.Azure.ActiveDirectory.GraphClient.ActiveDirectoryClient?
完成后应用程序的目的是注册新用户并允许指定用户管理应用程序用户(重置密码、更改用户属性、将用户分配到组等)。

我在 Visual Studio 2015 中,无论最新的东西来自 GitHub。

任何帮助将不胜感激。

【问题讨论】:

标签: c# asp.net-mvc azure-active-directory


【解决方案1】:

我们应该使用任务,而不是直接返回 AADUser。这里的代码对我很有效:

public async Task<AADUser> GetUserByPrincipalName(string userName)
    {

        var user = await GetUserByUserName(activeDirectoryClient, userName);

        return new AADUser()
        {
            displayName = user.DisplayName
        };

    }

控制器:

public async Task<ActionResult> test()
            {
            var user =  await new AzureADGraphTest.Users().GetUserByPrincipalName("userName@tenant.onmicrosoft.com");

            return View();
        }

【讨论】:

  • 是的 - 部分错误。我的一位朋友在我发布此消息后立即指出了这一点。感谢您的帮助。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
相关资源
最近更新 更多