是否有任何內置實用程序或幫助程序來解析HttpContext.Current.User.Identity.Name
,例如, domain\user
獲得單獨的域名,如果存在和用戶?內置幫助程序將User.Identity.Name解析爲Domain Username
或者還有其他的課程嗎?
據我所知,這是很容易調用String.Split("\")
但只是有趣
是否有任何內置實用程序或幫助程序來解析HttpContext.Current.User.Identity.Name
,例如, domain\user
獲得單獨的域名,如果存在和用戶?內置幫助程序將User.Identity.Name解析爲Domain Username
或者還有其他的課程嗎?
據我所知,這是很容易調用String.Split("\")
但只是有趣
這是更好的(更容易使用,沒有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。
您在`GetLogin`中的return語句可以簡化爲`return s.Substring(stop + 1);` – 2013-08-01 12:31:47
如果用戶名有多個反斜槓怎麼辦?如果用戶想要使用[email protected]的UPN格式呢?我結束了使用Win32函數CredUIParseUserName。請參閱http://www.pinvoke.net/default.aspx/credui.creduiparseusername – 2017-10-04 15:57:42
我不這麼認爲,因爲System.Security.Principal.WindowsIdentity不包含這樣的成員。
我覺得沒有太多,因爲我問自己同樣的問題前些天: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;
}
你們也可能會考慮解析字符串輸入,如「[email protected]」或「user @ domain」。
這是目前我在做什麼:
如果字符串包含「\」在隨後分割字符串「\」及摘錄用戶名和域名
否則如果字符串包含「@」在再拆串「@」和提取用戶名和域名
否則將字符串視爲沒有域名的用戶名
在輸入字符串不是易於預測的格式的情況下,我仍然在尋找更好的解決方案,即「domain \ user @ domain 」。我正在想RegEx ...
更新:我站在更正。我的答案有點不同,它指的是解析用戶輸入的用戶名和域的一般情況,就像用戶登錄/登錄提示符一樣。希望它仍然有助於某人。
需要一個優雅的解決方案。我同意。對域\用戶部分的一個答案是這樣的:http://stackoverflow.com/a/185716/481656 – DoomerDGR8 2012-06-06 08:51:41
System.Environment.UserDomainName
給您正在訪問的域名只有
同樣,System.Environment.UserName
給你的用戶名只
> System.Environment.UserDomainName`只給你域名 >>同樣,System.Environment.UserName `只給你用戶名這在ASP.NET – 2011-08-23 08:03:37
var components = User.Identity.Name.Split('\\');
var userName = components.Last()
var domainName = components.Reverse().Skip(1).FirstOrDefault()
好像做出正則表達式來解決的問題:
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, ".*\\\\", "");
}
}
雖然不是.NET內置的,但可以始終P/Invoke爲CredUIParseUserName。 Here是如何在.NET中使用它的一個例子。
PS:它似乎不處理「點」,如「。\ username」中。
這是我們經常忘記問自己的簡單問題。期待這個問題的任何有用的答案。 – 2008-12-08 13:25:50