1
我有下面的代码被连接到一个API基本身份验证:如何从一个BackgroundWorker得到HTTP状态代码
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#网络方法,例如, webclient.downloadStringAsync,但它们并不是真正的异步; DNS解析在当前线程上完成。我也不能使用异步并等待,因为我必须使用Net Framework 4.0。