在 GetStringAsync 中处理 http 响应代码
本文关键字:响应 代码 http 处理 GetStringAsync | 更新日期: 2023-09-27 18:31:33
我对C#很陌生,更不用说Windows Phone开发:)
了我正在尝试发送请求,获取 JSON 响应,但如果出现错误(例如 401),可以告诉用户。 这是我的代码:
async Task<string> AccessTheWebAsync()
{
//builds the credentials for the web request
var credentials = new NetworkCredential(globalvars.username, globalvars.password);
var handler = new HttpClientHandler { Credentials = credentials };
//calls the web request, stores and returns JSON content
HttpClient client = new HttpClient(handler);
Task<string> getStringTask = client.GetStringAsync("https://www.bla.com/content");
String urlContents = await getStringTask;
return urlContents;
}
我知道这一定是我在发送请求和存储响应的方式上做错了什么......但我只是不确定是什么。
如果有错误,我得到一个将军:net_http_message_not_success_statuscode
谢谢!
您可以使用 te GetAsync() 方法而不是 GetStringAsync()。
HttpResponseMessage response = await client.GetAsync("https://www.bla.com/content");
if(!response.IsSuccessStatusCode)
{
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
do something...
}
}
String urlContents = await response.Content.ReadAsStringAsync();
这样,您就可以利用可枚举的 HttpStatusCode 来检查返回的状态代码。
与其使用
HttpClient,不如使用一个普通的旧式 HttpWebRequest :)
async Task<string> AccessTheWebAsync()
{
HttpWebRequest req = WebRequest.CreateHttp("http://example.com/nodocument.html");
req.Method = "GET";
req.Timeout = 10000;
req.KeepAlive = true;
string content = null;
HttpStatusCode code = HttpStatusCode.OK;
try
{
using (HttpWebResponse response = (HttpWebResponse)await req.GetResponseAsync())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
content = await sr.ReadToEndAsync();
code = response.StatusCode;
}
}
catch (WebException ex)
{
using (HttpWebResponse response = (HttpWebResponse)ex.Response)
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
content = sr.ReadToEnd();
code = response.StatusCode;
}
}
//Here you have now content and code.
return content;
}