Это интересный вопрос, и было забавно углубиться в это глубже.
Строка кода, которую вы упомянули, на самом деле не идет в базу данных безопасности, чтобы получить пользователя.Он создает только объект User с указанным вами именем.
Вы можете обратиться к низкоуровневому классу ASP.NET System.Web.Security.Membership
.Он содержит метод GetUser
, который перегружается несколько раз.Хитрость в том, что его перегруженная версия, которая принимает имя пользователя в качестве параметра, ведет себя так же, как User.FromName
.Я имею в виду, что он не возвращает фактический UserName
из базовой таблицы SQL, а использует имя пользователя, которое вы передали в параметрах методу GetUser
.Это все еще работает правильно - все сравнения сделаны в нижнем регистре.
Итак, если вам НУЖНО получить реальный регистр имени пользователя, вы можете использовать один из методов, которые фактически запрашивают базовый источник SQL для поля UserName.Например, GetUser(object, bool)
, который получает пользователя по UserId:
// get the MembershipUser object normally by name
var user = Membership.GetUser(@"sitecore\admin", false);
if (user != null)
{
// get the same MembershipUser by Id - in this case it retuns username in correct case
user = Membership.GetUser(user.ProviderUserKey, false);
// use the user.UserName value as you wish
Response.Write(user.UserName);
}
Как вы можете видеть, это 2 обращения к базе данных вместо 1 для Membership.GetUser(username)
и вместо 0 для User.FromName(username)
,
В качестве альтернативы, если вы точно знаете, что у пользователя есть электронная почта, и знаете эту электронную почту, вы можете использовать метод Membership.GetUserNameByEmail(email)
.