Laden...

Convert.FromBase64String (value) TryParse ?

Erstellt von elron vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.050 Views
E
elron Themenstarter:in
171 Beiträge seit 2004
vor 14 Jahren
Convert.FromBase64String (value) TryParse ?

Abend liebe progger 😃,
im output fenster bzw. intern wird des öffteres eine Exception ausgelöst.
Gibt es eine schönere lösungen zu prüfen ob der string im Rahmen der Base 64 Conversion Table liegt?


 private bool GuidTryToParse(string value)
        {
            try
            {
                value = value.Replace("_", "/");
                value = value.Replace("-", "+");
                byte[] buffer = Convert.FromBase64String(value + "==");
                
                Guid tmp = new Guid(buffer);

                return true;
            }
            catch (FormatException)
            {
                return false;
            }
            catch (ArgumentException)
            {
                return false;
            }
            catch (NullReferenceException)
            {
                return false;
            }
        }

grüße elron

C
2.121 Beiträge seit 2010
vor 14 Jahren

Prüf halt die Zeichen einzeln, ob sie gültig sind. Z.B. mit einem regulären Ausdruck.
Warum checkst du so viele Exceptions, wenn du dann eh nur false zurück gibst? Da würd auch ein einziges catch reichen.
Was soll dabei eigentlich wirklich rauskommen? Das Guid Objekt nutzt du ja nicht, willst du nur testen obs ein gültiger Guid-String ist? Dazu bräuchtest du den Base64 nicht. Und auch hier könntest du einen reg. Ausdruck verwenden.

E
elron Themenstarter:in
171 Beiträge seit 2004
vor 14 Jahren

@chilic
Sorry ich muss mal weiter ausholen also ich benutze die Guid und konvertiere
die zu einer FriendlyId hier der sourcecode


            public static string EncodeFriendlyId(Guid guid)
            {
                string enc = Convert.ToBase64String(guid.ToByteArray());
                enc = enc.Replace("/", "_");
                enc = enc.Replace("+", "-");
                return enc.Substring(0, 22);
            }

            public static Guid DecodeFriendlyId(string encoded)
            {
                encoded = encoded.Replace("_", "/");
                encoded = encoded.Replace("-", "+");
                byte[] buffer = Convert.FromBase64String(encoded + "==");
                return new Guid(buffer);
            }

Die FriendlyId benutze ich in einem Web Projekt also als einen bestandteil der (URL).

Ich finde es halt komisch das MS das nicht mit eingebunden hat also die TryParse Method ist ja z.B. auch im int type vorhanden.

Warum checkst du so viele Exceptions, wenn du dann eh nur false zurück gibst?

Naja die sache ist das ich das Temporär eingebunden habe und ich genau wissen wollte welcher Exceptoin Type hier geschmissen wird.

regulären Ausdruck?

ja klar kann man machen aber nur dann wenn eine Guid vorhanden ist..

Hier mal ein beispiel:
Guid: bbafb774-fd0c-40cf-bf44-d6c6d6fee34e
friendlyId: dLevuwz9z0C_RNbG1v7jTg

Danke für Deine Ansätze 😃

Grüße elron

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo elron,

ja klar kann man machen aber nur dann wenn eine Guid vorhanden ist..

du kannst per Regex ohne weiteres prüfen, ob ein String korrektes Base64 ist.

Ich finde es halt komisch das MS das nicht mit eingebunden hat also die TryParse Method

So komisch finde ich das nicht, denn Base64String ist ja kein eigener Datentyp. Also kann es auch keine Base64String.TryParse-Methode geben. Natürlich wäre es praktisch, wenn trotzdem zum Beispiel eine TypConvert.FromBase64String-Methode geben würde. Gibts aber nunmal nicht.

herbivore