Встроенный помощник для анализа User.Identity.Name в Domain\Username
Есть ли встроенная утилита или помощник для синтаксического анализа HttpContext.Current.User.Identity.Name
, например. domain\user
для получения отдельного имени домена, если существует, и пользователя?
Или есть ли другой класс?
Я понимаю, что его очень легко назвать String.Split("\")
, а просто интересным
Ответы
Ответ 1
Это лучше (проще в использовании, без возможности NullReferenceExcpetion
и соответствует правилам кодирования MS относительно равномерного ввода пустой и нулевой строки):
public static class Extensions
{
public static string GetDomain(this IIdentity identity)
{
string s = identity.Name;
int stop = s.IndexOf("\\");
return (stop > -1) ? s.Substring(0, stop) : string.Empty;
}
public static string GetLogin(this IIdentity identity)
{
string s = identity.Name;
int stop = s.IndexOf("\\");
return (stop > -1) ? s.Substring(stop + 1, s.Length - stop - 1) : string.Empty;
}
}
Использование:
IIdentity id = HttpContext.Current.User.Identity;
id.GetLogin();
id.GetDomain();
Для этого требуется компилятор С# 3.0 (или более новый) и не требует 3.0.Net для работы после компиляции.
Ответ 2
System.Environment.UserDomainName
предоставляет только имя домена
Аналогично, System.Environment.UserName
дает вам только имя пользователя
Ответ 3
var components = User.Identity.Name.Split('\\');
var userName = components.Last()
var domainName = components.Reverse().Skip(1).FirstOrDefault()
Ответ 4
Я думаю, что нет, потому что я задал себе тот же вопрос на днях: D
Вы можете попробовать:
public static string GetDomain(string s)
{
int stop = s.IndexOf("\\");
return (stop > -1) ? s.Substring(0, stop + 1) : null;
}
public static string GetLogin(string s)
{
int stop = s.IndexOf("\\");
return (stop > -1) ? s.Substring(stop + 1, s.Length - stop - 1) : null;
}
Ответ 5
Вы, ребята, также можете рассмотреть синтаксический ввод строки, например [email protected], или "user @domain".
Это то, что я сейчас делаю:
Если строка содержит '\', разделите строку на '\' и извлеките имя пользователя и домен
Else Если строка содержит "@", разделите строку на "@" и извлеките имя пользователя и домен
Else обрабатывать строку как имя пользователя без домена
Я все еще ищу лучшее решение в случае, когда входная строка не находится в легко предсказанном формате, то есть "domain\user @domain". Я думаю, RegEx...
Обновление: я стою исправлено. Мой ответ - это немного вне контекста, он относится к общему случаю анализа имени пользователя и доменов вне пользовательского ввода, например, в приглашении пользователя/входа в систему. Надеюсь, что это все еще помогает кому-то.
Ответ 6
Я так не думаю, потому что System.Security.Principal.WindowsIdentity не содержит таких членов.
Ответ 7
Хотя это не встроенный .NET, всегда можно P/Invoke CredUIParseUserName. Здесь пример использования в .NET.
PS: Кажется, он не обрабатывает "точку", как в ".\username".
Ответ 8
Кажется, что проблема решена с помощью регулярных выражений:
public static class UserExtensions
{
public static string GetDomain(this IIdentity identity)
{
Regex.Match(identity.Name, ".*\\\\").ToString()
}
public static string GetLogin(this IIdentity identity)
{
return Regex.Replace(identity.Name, ".*\\\\", "");
}
}