使用块时编译器错误

本文关键字:编译器 错误 | 更新日期: 2023-09-27 18:06:47

我试图捕捉任何错误,突然出现当一个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();
}

使用块时编译器错误

你应该这样做。

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);
    }      
}

您对using -block的使用不正确。正确的代码是这样的:

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

或者不加block:

var response = request.GetResponse();
response.Dispose()

我相信你不能拦截它,因为它是在"try"块之前抛出的:"firstline"变量可能包含一个格式不正确的uri

文本。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(firstline); 

您也可以使用regex来验证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的详细描述。检查可以抛出哪些异常并修改当前的异常处理。你不应该离开……顺其自然。

WebRequest.Create只抛出,如果方案无效(冒号之前的位),有一个安全错误,或者如果你传递的URI是空的(尽管你没有在你的try语句中包含该语句,所以这些错误将不被上述代码处理)。

要处理其他错误,您应该查看HttpWebResponse.StatusCode属性并以适合您的应用程序的方式处理HTTP错误。

我想你是在谈论语法错误,因为你的代码不编译?

尝试在这行添加缺失的分号:

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

using-block不包含block:

using (var response = request.GetResponse())

删除using:

var response = request.GetResponse())