Это лучше ( легче использовать, никакая возможность 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();
Это требует компилятора C# 3.0 (или более новый) и не требует 3.0.Net для работы после компиляции.
Я думаю No также, потому что я спросил меня тот же вопрос на днях: 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;
}
Я не думаю так, потому что Система. Безопасность. Принципал. WindowsIdentity не содержит таких участников.
Вы, ребята, также можете рассмотреть возможность разбора входной строки вроде "user@company.com" или "user@domain".
Это то, что я сейчас делаю:
Если строка содержит '\', то разделите строку на '\' и извлеките имя пользователя и домен
.
Иначе если строка содержит '@', то разделите строку на '@' и извлеките имя пользователя и домен
.
Иначе относитесь к строке как к имени пользователя без домена
Я все еще охочусь за лучшим решением в случае, если входная строка находится не в легко предсказуемом формате, т.е. "domain\user@domain". Я думаю, что RegEx...
Обновление: Я стою на месте. Мой ответ немного выходит за рамки контекста, он относится к общему случаю разбора имени пользователя и доменов из пользовательского ввода, как в подсказке входа/входа в систему. Надеюсь, это кому-нибудь еще поможет.