2017-02-14 2 views
0

Я начинаю, и я работаю с одним приложением Xamarin. Я пытаюсь подключить свое приложение к одному серверу Https для получения Token, и когда я проверяю соединение с Postman, все в порядке. Но мое приложение, это другая история ..Соединение Xamarin Https с POST, asp.net-web-api-2, «Ошибка аутентификации или дешифрования»

Веб-сервис: aps.net-веб-апи-2

И это мое подключение код в Xamarin:

using System.Net.Http; 

protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.Main); 
     Button button = FindViewById<Button>(Resource.Id.getButton); 

     button.Click += async (sender, e) => 
     { 
      try 
      { 
       string url = "https://urlexample/foo/bar/Token"; 
       string values = await RequestWeb(url); 
      } 
      catch (Exception ex) 
      { 
       Log.Info("error with click", ex.ToString()); 
      } 
     }; 
    } 

    private async Task<string> RequestHttps(string url) 
    { 
     string responseString = string.Empty; 

     using (HttpClient client = new HttpClient()) 
     { 
      Dictionary<string,string> values = new Dictionary<string, string> 
      { 
       { "grant_type", "password" }, 
       { "username", "User1" }, 
       { "password", "123456" } 
      }; 

      FormUrlEncodedContent content = new FormUrlEncodedContent(values); 
      HttpResponseMessage response = await client.PostAsync(url, content); 

      responseString = await response.Content.ReadAsStringAsync(); 
     } 
     return responseString; 
    } 

Когда Я проверить с моим кодом, я восстанавливаю мое исключение с попытаться поймать:

I/error with click(14476): System.Net.WebException: Error: TrustFailure (The authentication or decryption has failed.) 

Probleme исходит от этой линии:

HttpResponseMessage response = await client.PostAsync(url, content); 

Пример с Почтальон, для связи с этим, я получаю соединение Токен:

Post -> Headers 
- Content_type : application/x-www-form-urlencoded 
- grand_type : password 
- username : User1 
- password : 123456 

результат:

{ "access_token": "ATT4U2xGQqsdf", "token_type": "bearer", "expires_in": 15 } 

Стараюсь anothers способы связи тоже (example here) И интересно, когда Я прочитал курс для Android (here), который сказал, что не создавайте интерфейс подключения whit thread, но используйте другой поток. Но много примеров, которые я нашел, не используют интерфейс потока, почему? Или я неправильно понял одну вещь?

Я также задаюсь вопросом, есть ли проблема из моих настроек?

Или, может быть, я просто полностью потерялся ... (ха-ха).

С наилучшими пожеланиями, Romain

ответ

0

Пожалуйста, используйте это две строки кода перед InitializeComponent(); в коде App.cs.

System.Security.Cryptography.AesCryptoServiceProvider AES = new System.Security.Cryptography.AesCryptoServiceProvider(); 

System.Net.ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true; 

По умолчанию Mono не имеют сертификатов, которые являются доверенными, так что вы должны либо пропустить ошибку или добавить сертификат, который дополняет ваш POST.

+0

Благодарим Zroq за ваш ответ! Теперь он отлично работает, спасибо за эту информацию! –

+0

Как «добавить сертификат, который дополняет ваш POST»? – mutex

Смежные вопросы