Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从backgroundWorker获取HTTP状态代码_C#_Backgroundworker - Fatal编程技术网

C# 如何从backgroundWorker获取HTTP状态代码

C# 如何从backgroundWorker获取HTTP状态代码,c#,backgroundworker,C#,Backgroundworker,我有以下代码连接到具有基本身份验证的api: var worker = new BackgroundWorker(); worker.DoWork += (sender, args) => { var request = HttpWebRequest.Create(url); request.Credentials = new NetworkCredential(email, password); args.Result = request.GetResponse

我有以下代码连接到具有基本身份验证的api:

var worker = new BackgroundWorker();

worker.DoWork += (sender, args) => {
    var request = HttpWebRequest.Create(url);
    request.Credentials = new NetworkCredential(email, password);
    args.Result = request.GetResponse();
};

worker.RunWorkerCompleted += (sender, e) => {
    String msg = "";
    // need to check whether there has been an error 
    // otherwise trying to get the result throws an exception
    if (e.Error == null) {
        var code = ((HttpWebResponse)e.Result).StatusCode;
        if (code == HttpStatusCode.OK)
            msg = "Connectivity OK";
        else if (code == HttpStatusCode.Unauthorized)
            msg = "Wrong username";
        else if (code == HttpStatusCode.Forbidden)
            msg = "Wrong password";
        else if (code == HttpStatusCode.NotFound)
            msg = "Wrong organisation";
        else
            msg = "Connectivity Error: " + code;
    } else {
        msg = "Connectivity error: " + e.Error.Message;
    }
    label.Text = msg;
    log.d(msg);
};
我想获得状态码,以便能够告诉用户用户名、密码或组织是否错误。不幸的是,如果出现网络错误,尝试获取e.Result会导致另一个错误,因此我只能在没有错误的情况下检查状态代码


我尝试过使用其他各种假定为异步的C#network方法,例如webclient.downloadStringAsync,但它们不是真正的异步;DNS解析在当前线程上完成。我也不能使用async和Wait,因为我必须使用Net Framework 4.0。

刚刚找到了我自己问题的答案,在这里:

在4xx和5xx范围内的服务器响应会引发WebException,因此您必须对此进行检查。此代码适用于:

var worker = new BackgroundWorker();

worker.DoWork += (sender, args) => {
    var request = HttpWebRequest.Create(url);
    request.Credentials = new NetworkCredential(email, password);
    // TODO: set proxy settings if necessary
    try {
        args.Result = ((HttpWebResponse)request.GetResponse()).StatusCode;
    } catch (WebException we) {
        args.Result = ((HttpWebResponse)we.Response).StatusCode;
    }
};

worker.RunWorkerCompleted += (sender, e) => {
    String msg = "";
    var code = (HttpStatusCode)e.Result;
    if (code == HttpStatusCode.OK)
        msg = "Connectivity OK";
    else if (code == HttpStatusCode.Forbidden)
        msg = "Wrong username or password";
    else if (code == HttpStatusCode.NotFound)
        msg = "Wrong organisation";
    else
        msg = "Connectivity Error: " + code;
    label.Text = msg;
    log.d(msg);
};