2017-02-11 3 views
0

Я пишу приложение для iOS для Xamarin и использую nsurlsession, чтобы попасть в конечную точку http, которая дает мне основной запрос проверки подлинности типа.Xamarin iOS: проблема с DidReceiveChallenge при использовании API NSURLSession

Моя проблема заключается в том, что метод DidReceiveChallenge в моем делегат не вызывается:

Мой код:

NSUrl url = new NSUrl("http://httpbin.org/basic-auth/test/test"); 
     NSUrlRequest request = new NSUrlRequest(url); 
     NSUrlSession session = null; 
     NSUrlSessionConfiguration myConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration; 
     MySessionDelegate myDelegate = new MySessionDelegate(); 
     NSOperationQueue myQueue = new NSOperationQueue(); 
     session = NSUrlSession.FromConfiguration(myConfig, myDelegate, myQueue); 

     NSUrlSessionTask task = session.CreateDataTask(request, (data, response, error) => 
     { 
      Debug.WriteLine("data is"+data+"response is"+response+"error is "+error); 

     }); 


     task.Resume(); 

Мой делегат класс:

выход
public class MySessionDelegate : NSUrlSessionDelegate 
{ 

    public override void DidReceiveChallenge(NSUrlSession session, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler) 
    { 
     Debug.WriteLine("challenge is"+challenge.ProtectionSpace.AuthenticationMethod); 
     base.DidReceiveChallenge(session, challenge, completionHandler); 
    } 


} 

приложение Я в настоящее время получение:

data isresponse is<NSHTTPURLResponse: 0x170437700> { URL: http://httpbin.org/basic-auth/nsharma/[email protected] } { status code: 401, headers { 
    "Access-Control-Allow-Credentials" = true; 
    "Access-Control-Allow-Origin" = "*"; 
    "Content-Length" = 0; 
    Date = "Sat, 11 Feb 2017 03:18:45 GMT"; 
    Server = nginx; 
    Via = "1.1 nas58.airwlab.com"; 
    "Www-Authenticate" = "Basic realm=\"Fake Realm\""; 
} }error is 

Как вы можете заметить, я могу ударить по URL-адресу, который выдает 401 из-за базового вызова auth. Обычно я ожидал, что поток вызовет метод DidReceiveChallenge в моем экземпляре делегата, но он никогда не вызывает его и заканчивает выполнение.

ответ

0

использовал неправильный класс делегата:

public class MySessionDelegate : NSUrlSessionDelegate{ 
public override void DidReceiveChallenge(NSUrlSession session, 
NSUrlSessionTask task, NSUrlAuthenticationChallenge challenge, 
Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler){ 

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