我在Xamarin论坛上发现了关于同一问题的一个话题,但是这个家伙没有得到任何回应,所以我猜测这是与Xamarin(Android)相关的罕见问题。

如果我使用有效的凭据,则下面的代码片段可以很好地工作,但是如果我使用了错误的凭据,或者如果应用程序无法进行身份验证的任何其他原因,则会引发WebException(错误的凭据为400,服务器错误的为500等) )。

问题是我不知道如何处理该异常,当它进入Post()方法时会引发该异常。

private void Authenticate()
{
    if (Credentials != null && client.Authenticator == null)
    {
        RestClient authClient = new RestClient(client.BaseUrl);
        RestRequest authRequest = new RestRequest("/token", Method.POST);

            UserCredentials userCred = Credentials as UserCredentials;
            if (userCred != null)
            {
                authRequest.AddParameter("grant_type", "password");
                authRequest.AddParameter("username", userCred.UserName);
                authRequest.AddParameter("password", userCred.Password);
            }

            var response = authClient.Post<AccessTokenResponse>(authRequest);
            response.EnsureSuccessStatusCode();

            client.Authenticator = new TokenAuthenticator(response.Data.AccessToken);
        }
}

最佳答案

服务器响应在4xx和5xx范围内将引发WebException。您需要捕获它,从WebException获取状态代码并管理响应。

try{
    response = (HttpWebResponse)authClient.Post<AccessTokenResponse>(authRequest);
    wRespStatusCode = response.StatusCode;
}
catch (WebException we)
{
    wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode;
    // ...
}


如果您需要HttpStatusCode的数值,请使用:

int numericStatusCode = (int)wRespStatusCode ;

09-18 03:24