在 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

谢谢!

在 GetStringAsync 中处理 http 响应代码

您可以使用 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;
    }