2008-10-09 10 views
17

Etki alanı/bilgisayar bilgilerini C# içindeki bir oturum açma kimliğinden kaldırmak istiyorum. Yani, ya "Domain \ me" ya da "Domain \ me" sadece "ben" yapmak istiyorum. Her ikisinin de varlığını kontrol edebilirim ve alt dizini başlatmak için dizin olarak kullanabilirim ... ama daha zarif ve kompakt bir şey arıyorum.C# oturum açma kimliğinden etki alanı bilgilerini kaldırın. #

kötüsü senaryo:

int startIndex = 0; 
int indexOfSlashesSingle = ResourceLoginName.IndexOf("\"); 
int indexOfSlashesDouble = ResourceLoginName.IndexOf("\\"); 
if (indexOfSlashesSingle != -1) 
    startIndex = indexOfSlashesSingle; 
else 
    startIndex = indexOfSlashesDouble; 
string shortName = ResourceLoginName.Substring(startIndex, ResourceLoginName.Length-1); 

cevap

36

.....

jilet kullanmak ---- , thusly:

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName); 
+0

Mükemmel nokta: RegEx kullanmak çok daha şık bir çözümdür. – Dan

+4

adı [email protected] biçimidir? Orada 5-razer bıçak çözümü var mı? Teşekkürler – DoomerDGR8

+1

Bunu da yakın zamanda yapmalıydım ('NTAccount' alanından alan kısmını kaldırarak) ve 'Regex.Match (value, "([^\\\\] +) $ ", RegexOptions.None) .Gruplar [0] .Captures [0] .Daha sonra, hesap adı kısmının doğrudan çıkarılması için" Regex.Replace (value, "^. * \\) \\ ", string.Empty, R egexOptions.None); 'İstediğiniz hesap adına kadar her şeyi kaldırmak için. Aynı fark :) – rdev5

3

Ben hep böyle yapın: Şimdi

string[] domainuser; 
    string Auth_User = Request.ServerVariables["AUTH_USER"].ToString().ToLower(); 
    domainuser = Auth_User.Split('\\'); 

sen kaç parça görmek için domainuser.Length bakabilirsiniz orada ve DomainUser [0] için kullanıcı adı için alan ve domainuser [1]. Sen Yol sınıfını kötüye olabilir

using System; 
using System.Text.RegularExpressions; 
public class MyClass 
{ 
    public static void Main() 
    { 
     string domainUser = Regex.Replace("domain\\user",".*\\\\(.*)", "$1",RegexOptions.None); 
     Console.WriteLine(domainUser); 

    } 

} 
2
 string theString = "domain\\me"; 
     theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1]; 
+0

Evet, ben de bu şekilde, BoltBait'in dönüşümünü daha da düşürdüğümde yaptığım gibi, "kontrol edilen" bir kasada kullanıcı adlarını bulundurmak her zaman yararlı olur (örneğin, bunları örneğin dizinleyici anahtarları olarak kullanıyorsa. –

+0

İyi nokta, Kevin. Aynı zamanda hızın kesinlikle bu durumda bir sorun olmadığını, dolayısıyla birden fazla bölme çağrısının, vb., Çirkin kod için bir hata oluşturduğunu düşünmüştüm ama ... –

24

Elinizde sadece bir çekiç olduğunda, her şey bir çivi gibi görünüyor

+2

Güzel, bu zekice. – Pete

+12

ResourceLoginName içinde Active Directory ve muhtemelen diğer dizin sistemleri açısından mükemmel bir şekilde izin verilen bir noktaya sahip olması durumunda System.IO.Path.GetFileName (ResourceLoginName) kullanmak muhtemelen en iyisidir. – endian

+1

Bunu kullanmak çok yanlış geliyor - ama aynı zamanda çok doğru lol ... – derekmx271

4

ne hakkındadır:

string shortName = ResourceLoginName.Split('\\')[1] 
1

Bu geçerli bir etki alanı oturum açma ikisi için çalışır:

var regex = @"^(.*\\)?([^\@]*)(@.*)?$"; 
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None); 
user = Regex.Replace("[email protected]", regex, "$2", RegexOptions.None); 
2

Bu ikisi için ancak adlı grubu ile birlikte çalışacaktır.

Regex.Replace(User.Identity.Name,@"^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$", "${username}", RegexOptions.None) 

Piggy Derek Smalls Yanıt desteğini

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$ 
0

... benim için çalıştı.