UriFormatException - pomoc z wyjątkiem

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();
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.

0

Use of unassigned local variable 'www'

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.

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?

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());
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ć.

0

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

0

Dziękuję ciepło.

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