UriFormatException - pomoc z wyjątkiem

Odpowiedz Nowy wątek
2011-07-17 21:25
Wyjątkowy Wyjątek
0

Witam.
W jaki sposób wyłapać wyjątek UriFormatException?

UriFormatException was unhandled
Invalid URI: The format of the URI could not be determined.

przy linijce:

HttpWebRequest www = (HttpWebRequest)HttpWebRequest.Create(page);
 

To mój pierwszy raz z wyjątkiem, na początku próbowałem zwykłą instrukcją warunkową, jednak nie pomogło.

Próbowałem różnie, np.

try{
HttpWebRequest www= (HttpWebRequest)HttpWebRequest.Create(page);
               }
catch(UriFormatException exc){
MessageBox.Show("bum parapapa");
}

Jednak wywalało:

Error   1   The name 'www' does not exist in the current context    

przy dalszej części kodu.

Cały kod:

string url = textBox1.Text;
            string page = @url;
 
                HttpWebRequest www = (HttpWebRequest)HttpWebRequest.Create(page);
 
                StreamReader SR = new StreamReader(www.GetResponse().GetResponseStream());
                Char[] buf = new Char[256];
                int licz = SR.Read(buf, 0, 256);
                while (licz > 0)
                {
                    String tytul = new String(buf, 0, licz);
                    Match match = Regex.Match(tytul, @"<title>([^<]+)", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    string asd = match.Groups[1].Value;
                    listBox1.Items.Add(asd);
                }
 
                licz = SR.Read(buf, 0, 256);
            }
 
            textBox1.Clear();

Pozostało 580 znaków

2011-07-17 23:19
0
HttpWebRequest www;
try {
  www = (HttpWebRequest)HttpWebRequest.Create(page);
} catch (UriFormatException exc) {
  ...
}

problem był w tym, że jak umieściłeś deklarację www wewnątrz klamer w try, to ta zmienna istniała tylko wewnątrz tego bloku.

Pozostało 580 znaków

2011-07-17 23:35
Wyjątkowy Wyjątek
0

Use of unassigned local variable 'www'

Pozostało 580 znaków

2011-07-18 12:59
Wyjątkowy Wyjątek
0

Mój błąd, wszystko w porządku jest.

Jednak teraz przy:

StreamReader SR = new StreamReader(www.GetResponse().GetResponseStream());

NullReferenceException was unhandled.
Object reference not set to an instance of an object.

Pozostało 580 znaków

2011-07-18 13:24
0
Wyjątkowy Wyjątek napisał(a)

Jednak teraz przy:

StreamReader SR = new StreamReader(www.GetResponse().GetResponseStream());

NullReferenceException was unhandled.
Object reference not set to an instance of an object.

Zapewne w 'www' masz null. A nie wyrzuciło Ci wyjątku?

Pozostało 580 znaków

2011-07-18 13:30
Wyjątkowy Wyjątek
0

NullReferenceException - taki wyjątek.

 HttpWebRequest www;
        private void button1_Click(object sender, EventArgs e)
        {
 
            string url = textBox1.Text;
            string page = @url;
 
                try {
              www = (HttpWebRequest)HttpWebRequest.Create(page);
                    } 
            catch (UriFormatException exc) {
                MessageBox.Show("Invalid URL");
                           }
 
                StreamReader SR = new StreamReader(www.GetResponse().GetResponseStream());
 
                Char[] buf = new Char[256];
                int licz = SR.Read(buf, 0, 256);
                while (licz > 0)
                {
                    String tytul = new String(buf, 0, licz);
                    Match match = Regex.Match(tytul, @"<title>([^<]+)", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    string asd = match.Groups[1].Value;
                    listBox1.Items.Add(asd);
                }
 
                licz = SR.Read(buf, 0, 256);
            }
 
            textBox1.Clear();
        }

Cały kod kliknięcia na button.
W URL zawsze wprowadzam jakiś adres WWW. Jeżeli jest prawidłowy, dodaje go do listBoxa, jeżeli nie - wywala MsgBoxa z Invalid URL, a potem ten błąd:

NullReferenceException was unhandled.
Object reference not set to an instance of an object.

przy

 StreamReader SR = new StreamReader(www.GetResponse().GetResponseStream());

Pozostało 580 znaków

2011-07-18 13:45
bo
0
www = (HttpWebRequest)HttpWebRequest.Create(page);

może chyba wygenerować również innego typu wyjątki (adres może być poprawny ale nie można się połączyć).
Niezależnie od rodzaju wyjątku, dalszy część kodu nie powinna się wykonywać, u Ciebie jest komunikat o błędzie, a kod się próbuje wykonać.

Pozostało 580 znaków

2011-07-18 13:46
0

Dodaj return po MessageBox.Show("Invalid URL");

Pozostało 580 znaków

2011-07-18 21:14
Wyjątkowy Wyjątek
0

Dziękuję ciepło.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0