我的UserIdentity表中有一个自定义字段,称为“名称”。名称字段将包含已注册用户的名称。
public class User : IdentityUser
{
public string Name { get; set; }
public bool CanNotify { get; set; }
}
我还有一个名为Post的表,其中有一个字段“ AuthorName”
public class Post
{
public Instant Published { get; set; }
public string Content { get; set; }
public Guid UserId { get; set; }
public string AuthorName { get; set; }
}
创建/发布博客时,我希望AuthorName应该是已登录的作者,这意味着AuthorName应该与当前已登录的UserManager表中的Name关联。
public async Task<IActionResult> OnPostAsync()
{
cmd = _mapper.Map(User, cmd);
}
public class Mapper : Profile
{
public Mapper()
{
CreateMap<ClaimsPrincipal, CreatePostCommand>(MemberList.None)
.ForMember(d => d.UserId, m => m.MapFrom(s =>
Guid.Parse(s.FindFirstValue(ClaimTypes.NameIdentifier))))
.ForMember(d => d.Name, m => m.MapFrom(s => s.Identity.AuthorName));
}
}
以上代码可以正常工作,但是我不希望映射身份名称,而应该从UserManager表进行映射,我已经尝试了很多逻辑,但是没有用,让我粘贴其中之一:-
CreateMap<ClaimsPrincipal, CreatePostCommand>(MemberList.Source)
.ForMember(d => d.UserId, m => m.MapFrom(s => Guid.Parse(s.FindFirstValue(ClaimTypes.NameIdentifier))))
.ForMember(d => d.Name, m => m.MapFrom(s => s.FindFirst(_userManager.GetUserAsync(User).Result.AuthorName)));
但是上述映射规则给我一个错误
“用户”是一种类型,在给定的上下文中无效
答案 0 :(得分:0)
您可能会从蓝色的“用户”中看到,“用户”被编译器解释为类型(或可能是方法),但编译器错误表明它被解释为类型,即也很合逻辑,因为存在类型User)。这可能只是因为您有一个User类。
问题是:您试图将哪个对象/变量传递给_userManager.GetUserAsync()?将该变量从User重命名为其他名称(例如LocalUser或myUser或其他名称),这应该可以解决问题。