6

我的应用程序使用UserPrincipal该类来确定用户属于哪些组,然后使用该信息来确定用户是否经过身份验证才能使用我的应用程序。事情在一段时间内工作得很好,但最近我开始遇到异常

Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

打电话时UserPrincipal.FindByIdentity。看起来调用成功并且异常处理得当,但让我担心将来身份验证会突然中断。我没有在任何地方明确创建 GUID,所以我不知道异常来自哪里。

4

4 回答 4

7

很可能是在试图从无效的 GUID 值初始化某种安全描述符的框架代码深处引发异常。如果框架正在捕获它并在内部处理它,我就不会担心它。

跟踪框架代码,这里可能是它发生的一个地方:

protected static bool IdentityClaimToFilter(string identity, string identityFormat, ref string filter, bool throwOnFail)
{
  if (identity == null)
    identity = "";
  StringBuilder filter1 = new StringBuilder();
  switch (identityFormat)
  {
    case "ms-guid":
      Guid guid;
      try
      {
        guid = new Guid(identity);
      }
      catch (FormatException ex)
      {
        if (throwOnFail)
          throw new ArgumentException(ex.Message, (Exception) ex);
        else
          return false;
      }
...

请注意,它尝试创建一个新Guid的 ,如果失败,则会引发异常,但代码会吞下它并返回 false

于 2013-01-17T19:25:37.187 回答
4

如果您提供 IdentityType,它不会尝试将您的值视为 Guid,因此不会抛出异常

FindByIdentityWithType(context, typeof(UserPrincipalEx), **IdentityType.SamAccountName**, identityValue);
于 2015-10-14T15:41:09.423 回答
2

我的调试系统突然开始这样做了,我不知道为什么。原来,当我删除一个 .user 文件时,我似乎禁用了Just My Code调试,并且这个异常开始被破坏。因此,请检查您在该区域周围的 VS 选项,您(可能)希望勾选此选项:

在此处输入图像描述

于 2018-05-18T14:52:39.127 回答
-2

只有以下方式对我有用。

var user = _userManager.FindByNameAsync(HttpContext.User.Identity.Name);
于 2020-09-28T10:30:46.810 回答