Ошибка компилятора при использовании блока - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь отследить любые ошибки, которые возникают, когда URL недействителен, ниже приведен исходный код:

public static void mymethod()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline);
    Stopwatch timer = new Stopwatch();
    timer.Start();                
    using (var response = request.GetResponse())    
    timer.Stop();
    timeTaken = timer.Elapsed.ToString();
}

Я пытался создать обработчик исключений, как показано ниже, но безуспешно:

public static void mymethod()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline);
    Stopwatch timer = new Stopwatch();
    timer.Start();

    try
    {            
        using (var response = request.GetResponse())
    }    
    catch
    {
        Console.WriteLine("error here...")
    }

    timer.Stop();
    timeTaken = timer.Elapsed.ToString();
}

Ответы [ 6 ]

2 голосов
/ 26 августа 2011

Вы должны сделать что-то вроде этого.

public static void ShowResponseAndTimeTaken(string firstline)
{
    try
    {   
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline);
        System.Diagnostics.Stopwatch timer = new Stopwatch();
        timer.Start();
        using (var response = request.GetResponse())
        {
            Console.WriteLine("Response : {0}", response);
        }
        timer.Stop();
        Console.WriteLine("Time taken : {0}", timer.Elapsed); 
    }
    catch(Exception e)
    {
        Console.WriteLine("error : {0}", e.Message);
    }      
}
1 голос
/ 26 августа 2011

Вы используете using -блок неправильно. Правильно выглядит так:

using (var response = request.GetResponse())
{
}

или просто без блока:

var response = request.GetResponse();
response.Dispose()
0 голосов
/ 26 августа 2011

Я думаю, вы говорите о синтаксических ошибках, потому что ваш код не компилируется?

Попробуйте добавить пропущенную точку с запятой в эту строку:

Console.WriteLine("error here...")

И блок использования не содержит блока:

using (var response = request.GetResponse())

удалить используя:

var response = request.GetResponse())
0 голосов
/ 26 августа 2011

WebRequest.Create выдает только, если схема недопустима (бит перед двоеточием), имеется ошибка безопасности или если переданный вами URI равен NULL (хотя вы не включили этот оператор в свой оператор try, поэтому все равно ошибки не будут обработаны вышеуказанным кодом).

Чтобы обработать другие ошибки, вам нужно взглянуть на свойство HttpWebResponse.StatusCode и обработать HTTP-ошибки в соответствии с вашим приложением.

0 голосов
/ 26 августа 2011

Вы также можете проверить URL с помощью регулярных выражений вместо ожидания создания исключения - http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx.

Здесь (http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse.aspx) вы можете найти подробное описание GetResponse. Проверьте, какие исключения могут быть выброшены, и измените свойтекущая обработка исключений. Вы не должны оставлять try ... catch как оно есть. По крайней мере, перехватывайте Exception class.

0 голосов
/ 26 августа 2011

Я полагаю, что вы не можете перехватить его, потому что он генерируется перед блоком try: возможно, переменная firstline содержит текст с возможно неправильно отформатированным uri,

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline); 
...