C# HttpClient在未成功状态码上抛出异常

3
我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我遇到了一个非常奇怪的问题。当我请求的网页返回一个不是2 **状态码的状态码时,HttpClient会抛出异常。

实现:


我遇到了一个很奇怪的问题。当我请求一个返回非2**状态码的网页时,HttpClient会抛出异常。
实现:
try {

    //post-anfrage an webservice starten
    var request = await httpClient.PostAsync(SettingsPage.WebServiceURL + site,
                content);

    if (!request.IsSuccessStatusCode) {
        if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized) {
            await User.Instance.Logout();
        }
        var message = await request.Content.ReadAsStringAsync();
        RaiseErrorMessage(null, message);
    }

    SaveCookies(request);

    timer.Change(PING_INTERVAL, PING_INTERVAL);

    return request;
}
catch (TaskCanceledException e) {
    RaiseConnectionError(null, "Verbindung zu Webservice fehlgeschlagen!");
    return null;
}
catch (Exception ex) {
    RaiseConnectionError(null, "Es ist etwas schief gelaufen..." + System.Environment.NewLine + "Bitte Support Kontaktieren!");
    Debug.WriteLine("AppWarehouse.pro: " + ex.Message);
    Debug.WriteLine("AppWarehouse.pro: " + ex.StackTrace);
    return null;
}
}

我不明白它为什么会这样做。对我来说,没有任何理由解释这种行为。如果能提供修复方法或帮助我解决问题,我将不胜感激。


!request.IsSuccessStatusCode - 如果 StatusCode 不在 2** 范围内,这会抛出一个错误。例如,如果你得到了 404 错误,那么这行代码就会导致错误。你正在发布内容,想知道操作是否按预期进行。 - Daniel Hollinrake
@DanielHollinrake 不是那个引起问题的原因。它仍然抛出名为HttpRequestException的异常。 - JonKAS
你怎么知道响应状态是404或403而不是HResult? - Barnstokkr
@Barnstokkr 因为我在我的 WebAPI 中返回了一个明确的状态码。 - JonKAS
@Barnstokkr ex.Message 只是说在发送请求时发生了错误... 我返回 null,因为该函数希望得到请求结果。因此我返回 null,因为我没有得到结果。 - JonKAS
显示剩余3条评论
1个回答

1

我解决了这个问题... 这是 Xamarin 与一个程序集结合时的奇怪行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接