2015-10-14 6 views
1

Я нашел один поток на форумах Xamarin по той же проблеме, но у парня не было ответов, поэтому я предполагаю, что это редкая проблема, связанная с Xamarin (Android).Аутентификация RestSharp в Xamarin

Фрагмент кода ниже работает отлично, если я использую действительные учетные данные, но если я использую неправильные учетные данные или если есть какая-либо другая причина, по которой приложение не может пройти аутентификацию, генерируется исключение 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); 
     } 
} 

ответ

0

Вы используете блок try..catch чтобы поймать исключение, а затем добавить любую логику обработки ошибок.

try { 
    var response = authClient.Post<AccessTokenResponse>(authRequest); 
    response.EnsureSuccessStatusCode(); 
} catch (WebException ex) { 
    // something bad happened, add whatever logic is appropriate to notify the 
    // user, log the error, etc... 
    Console.Log(ex.Message); 
} 
2

Ответы сервера в диапазоне 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 ; 
Смежные вопросы