2017-01-25 1 views
0

System.Net API를 사용하여 현재 사용자를 REST 끝점에 인증 할 수 없습니다. 아래의 예는 내가있는 NSURLConnection를 사용하는 경우 나 문제가되지 인증 할 수 있어요 허가받지 않은 401Xamarin.Mac - 현재 자격 증명을 REST 끝점에 전달하는 방법

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://rest/api/endpoint") 
    { 
     using (httpResponseMessage response = await client.SendAsync(request)) 
     { 
      if (response.IsSuccessStatusCode) 
       //do something 
     } 
    } 
} 

를 반환합니다. 그래서, NSUrlConnection 어떻게 자격 증명을 전달해야합니다. 다음은 해당 코드의 일부입니다.

var request = new NSMutableUrlRequest(new NSUrl("http://rest/api/endpoint"), NSUrlRequestCachePolicy.ReloadIgnoringCacheData, 0); 
request["Accept"] = "application/json"; 
NSUrlConnection.SendAsynchronousRequest(request, NSOperationQueue.MainQueue, delegate(NSUrlResponse, response, NSData data, NSError error) 
{ 
    // successfully authenticated and do something with response 
}); 

다른 서비스와 공유하기 위해 내 서비스 코드를 PCL로 포장하고 싶습니다. 따라서 System.Net API 내에서이 모든 작업을하고 싶습니다. 이것이 가능한가?

업데이트 :
HttpClientHandler를 사용하고 CredentialCache.DefaultNetworkCredentials와 같은 기본 자격 증명을 사용해 보았습니다. 이 기능을 작동시키는 유일한 방법은 내가 원하지 않는 자격 증명을 하드 코드하는 것입니다. System.Net 스택이 OS의 자격 증명을 표시하지 않는 것으로 보입니다.

+1

인증을위한 헤더를 추가해야한다고 가정합니다. 끝점에 따라 다릅니다. 'C# httpclient authenticate '를 당신이 좋아하는 검색 엔진에 타이핑하면 그 질문에 답을해야만합니다. – Equalsk

+0

헤더와 함께 하드 코드 된 자격 증명을 보내는 경우에만 작동합니다. 그러나 현재 mac에 로그온 한 사용자의 현재 자격 증명을 사용하려고합니다. – Paul

답변

0

기본 인증을 사용한다고 가정합니다. 예를 들어, HttpClientHandler를 사용하여 HttpClient를 사용하면됩니다.

using (var handler = new HttpClientHandler { 
    UseDefaultCredentials = true 
}) 
using (var client = new HttpClient(handler)) 
{ 
    var result = await client.SendAsync(...); 
} 
+0

불행히도 이것은 작동하지 않습니다. 다른 아이디어? – Paul

+0

흠, HttpClient의 제한 사항 일 수 있습니다. http://stackoverflow.com/questions/12212116/how-to-get-httpclient-to-pass-credentials-along-with-the-request –

관련 문제