Exception abfangen und "zurücksetzen"

nammder

Mitglied
Hallo zusammen,

meine Frage ist wahrscheinlich ein wenig seltsam, ich hoffe aber, dass mir jemand dabei helfen kann und dass ich mich hier an der richtigen Stelle im Forum befinde.

1. Ich versuche mittels WebRequest einen response zu erhalten
Code:
response = request.GetResponse();
2. In einem try-catch Block fange ich dann brav eine mögliche Exception ab.
3. Sollte es sich bei der Exception um einen Typ "401" handeln, sprich die Benutzerdaten sind nicht korrekt, wird ein Dialog angeboten, der die Neueingabe der LogIn-Daten erlaubt.

Grundsätzlich funktioniert das Ganze zwar, und mein Request wird anschließend (nach Eingabe der korrekten LogIn-Daten) korrekt ausgeführt und das gewünschte Ergebnis erhalte ich auch. Leider bleibt aber der ursprüngliche Fehler "401" bestehen und wird am Ende als Dialog angezeigt, obwohl er nach der Neuangabe der Benutzerinformationen quasi "hinfällig" geworden ist.

401er.jpg

Daher meine Frage:
Besteht die Möglichkeit den ersten Fehler "zu löschen" bzw. ihn soweit zu unterdrücken, dass das Programm ohne Fehler-Ausgabe zu Ende läuft?
Ein Versuch die Exception wieder "zu nullen" funktioniert so wie ich das versucht habe schon mal nicht.
Code:
WebException e;
e = null;

Hoffnungsvollen Dank schonmal und Gruß,
Stefan
 

nammder

Mitglied
Hallo,
sorry, dann hole ich das hier mal nach, ich hoffe, dass die Infos dabei sind, die gebraucht werden:
C#:
...
//Leeres Response-Objekt anlegen, welches im TRY-Zweig versucht wird zu "füllen"
                WebResponse response = null;
                try
                {
                    response = requestPost.GetResponse();
                }
                catch (WebException e)
                {
                    if (e.Message.Contains("409")) //Bei einem Fehler vom Typ 409 = Konflikt
                    {
                        throw new Exception("Einer oder mehrere Werte bei der Fehleranlage sind ungültig.");
                    }
                    if (e.Message.Contains("401")) //Bei einem Fehler vom Typ 401 = nicht authorisiert
                    {
                        e = null;
                        bool checkedLogInData = false;
                        //Schleife mit Prüfung nach Korrektheit der User-Daten
                        while (!checkedLogInData)
                        {
                            setNewLogInData(); // ruft den Eingabe-Dialog für die LogIn-Daten und schreibt diese in eine XML-Datei
                            checkedLogInData = checkLogIn(requestUrl);//prüft mittels WebRequest, ob die neuen LogIn-Daten korrekt sind.
                        }
                        //Nach Eingabe der korrekten Benutzerdaten, wird wieder ein GetResponse() versucht
                        response = requestPost.GetResponse();
                    }
                }
...
und hier noch der Inhalt von checkLogIn(requestUrl)
C#:
private bool checkLogIn(string requestUrl)
        {
            //Anmeldedaten werden geprüft und ggf. abgefragt
            WebRequest request;

            // Set properties of the GET WebRequest
            request = WebRequest.Create(requestUrl);

            request.Method = "GET";
            request.ContentType = "text/plain";
            request.ContentLength = 0;
            request.Credentials = createNetworkCredential();
            request.PreAuthenticate = true;
            request.Timeout = 30000;

            try
            {
                WebResponse response = request.GetResponse();
            }
            catch (WebException e)
            {
                if (e.Message.Contains("401"))
                {
                    return false ;
                }
                else
                {
                    throw new Exception("Der folgende Fehler ist aufgetreten:\n"
                                            + e.Message);
                }
            }
            return true;
        }
Fehlt noch was zur besseren Beurteilung?
Danke und Gruß,
Stefan
 
Zuletzt bearbeitet von einem Moderator:

nammder

Mitglied
Hallo zusammen,
meine Frage hat sich erledigt.
Mein Fehler :confused:
Natürlich wird durch das Werfen bzw. Abfangen der Exception der Abbruch der Anwendung verhindert.
Mein Problem lag darin, dass ich mit den selben LogIn-Daten mit denen ich die erste Exception ausgelöst habe, den Zugriff wieder versucht habe, ohne vorher die neuen Benutzerdaten eingelesen zu haben.
Nachdem ich das umgestellt habe und die Anwendung beim zweiten Versuch von
C#:
response = request.GetResponse();
das geänderte Passwort heranzieht funktioniert auch alles wie es soll.
Vielen Dank und Gruß,
Stefan
 
Zuletzt bearbeitet von einem Moderator:

Shakie

Erfahrenes Mitglied
Was passiert, wenn der Benutzer zwei mal hintereinander falsche Benutzerdaten eingibt? Bekommt er dann keine dritte Chance?