1)我试图允许用户在ASP.MVC / Identity应用程序中更改其UserName(电子邮件)等。使用FluentValidation我想检查没有其他用户正在使用新电子邮件。
在控制器中,我使用User.Identity.GetUserId(),但在构建验证规则时这不可用。如何检索当前已验证的userId?
public class ManageUserViewModelValidator : AbstractValidator<ManageUserViewModel>
{
public ManageUserViewModelValidator()
{
RuleFor(e => e.UserName)
.NotEmpty()
.WithMessage("Måste ange din e-post adress.")
.EmailAddress()
.WithMessage("Ogiltig e-post adress.")
.Must((model, _) => UserMethods.IsUserNameAvailable(model.UserName, "userId???"))
.WithMessage("E-post adressen är upptagen.");
}
...
}
[FluentValidation.Attributes.Validator(typeof(ManageUserViewModelValidator))]
public class ManageUserViewModel
{
[Display(Name = "E-post*")]
public string UserName { get; set; }
...
}
2)存储此类更改的最佳方法是什么。现在我正在使用AutoMapper:
public static void Update(this DbContext context, ManageUserViewModel model, string userId)
{
User user = context.Users.FirstOrDefault(e => e.Id.Equals(userId));
Mapper.CreateMap<ManageUserViewModel, TessinUser>();
Mapper.Map(model, user);
context.SaveChanges();
}
3)在我的标题中,我使用User.Identity.GetUserName()
显示当前登录的用户,但在我更改了UserName后,此文本未更新。我需要注销并再次登录才能更新。有没有办法让ASP更新当前用户?
答案 0 :(得分:2)
1)我试图允许用户在ASP.MVC / Identity应用程序中更改其UserName(电子邮件)等
Asp.net标识有一个名为UserManager的类。这个类公开了许多函数,包括Update,它将自动更新UserStore中的用户数据。
使用FluentValidation我想检查没有其他用户正在使用新电子邮件。
如果您使用UserManager类的Create功能来创建新用户,则此功能会自动关注重复的用户名条目验证。如果无效或重复输入,Create函数会返回您可以向用户显示的描述性错误消息。
2)存储此类更改的最佳方法是什么。现在我正在使用AutoMapper:
我不明白你在2分中提到的代码。 Automapper的唯一目的是将一个对象映射到另一个对象。在该代码中
但是这个东西从未在当前上下文中进行任何更改,因此 context.SaveChanges()无效。
我认为这就是为什么你的User.Identity.GetUserName()没有更新的原因。