我在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 ;