2016-04-12 8 views
0

Ich versuche, eine gesicherte Web-API auf meinem Server zugreifen, die Authentifizierung (Google/Facebook) von einer Xamarin.Ios App erfordert.Sichere Web API von Xamarin.Ios nicht funktioniert

Herunterladen und Ausführen der Probe ToDo App aus dem azurblauen Portal und Hinzufügen der Authentifizierung wie in diesem Tutorial https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-ios-get-started-users/ funktioniert wie ein Charme mit Google und Facebook.

Aber wenn ich eine schnelle ASP.NET-Anwendung erstellen und einen Web Api 2 Controller hinzufügen, und versuchen, es aus dem Xamarin.Ios aufrufen, es Dosis nicht einmal erreichen.

Zum Beispiel haben diese Steuerung:

public class GetAdviceController : ApiController 
{ 
    [HttpGet] 
    [Authorize] 
    [ResponseType(typeof(string))] 
    public IHttpActionResult GetAdvice() 
    { 
     return Ok("RandomAdvice/Passed"); 
    } 
} 

Und diesen Code in Xamarin.Ios

public MobileServiceClient Client = new MobileServiceClient(Constants.ApplicationURL); 
    HttpClient restClient= new HttpClient(); 

     try 
     { 
      MobileServiceUser User = await App.Client.LoginAsync(this, MobileServiceAuthenticationProvider.Google); 
      //User contains the Token and SID 

      Console.Error.WriteLine(@"Logged IN"); 

      HttpResponseMessage response = new HttpResponseMessage(); 
      try 
      { 
       response = await client.GetAsync("https://mysite.azurewebsites.net/api/getadvice"); 

    //The response is 200 but it does not reach my controller and redirests me to the login screen of the asp.net website. http://imgur.com/Fp9FhdR 


      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

Die response.content http://imgur.com/Fp9FhdR nur im JSON-Format ist.

Ich bin sicher, ich vermisse etwas, aber ich kann nicht finden, was es ist. Danke.

+0

Setzen Sie das Token in einer beliebigen Kopfzeile irgendwo? Ich sehe nichts, was darauf hindeutet. – Cheesebaron

Antwort

0

sollten beide Seiten überprüfen: Server und Client:

On Server, stellen Sie sicher, dass Sie [MobileAppController] für die Web-API-Controller

[MobileAppController] 
public class GetAdviceController : ApiController 
{ 
} 

Kunde Xamarin haben, wenn Sie klassische verwenden möchten HttpClient für die Anforderung an die Web-API (Azure-Server), müssen einige Header hinzugefügt werden:

HttpClient restClient= new HttpClient(); 
restClient.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue ("application/json")); 
restClient.DefaultRequestHeaders.Add ("ZUMO-API-VERSION", "2.0.0"); 
restClient.DefaultRequestHeaders.Add ("X-ZUMO-AUTH", token); 
restClient.GetAsync(....); 

Verwenden Sie token von Benutzerobjekt, das Sie mit Google authentifiziert haben