【问题标题】:Xamarin iOS : Issue with DidReceiveChallenge while using NSURLSession APIXamarin iOS:使用 NSURLSession API 时出现 DidReceiveChallenge 问题
【发布时间】:2017-02-11 12:31:31
【问题描述】:

我正在编写一个 Xamarin 本机 iOS 应用程序并使用 nsurlsession 访问一个 http 端点,这给了我基本的类型身份验证挑战。

我的问题是我的委托中的 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/P@ssw0rd } { 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 

如您所见,由于基本身份验证挑战,我可以点击发出 401 的 url。通常我希望流程在我的委托实例中调用 DidReceiveChallenge 方法,但它从不调用它并完成执行。

【问题讨论】:

    标签: ios xamarin xamarin.ios nsurlsession


    【解决方案1】:

    使用了错误的委托类:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多