2017-01-25 11 views
0

System.Net APIを使用して現在のユーザーをRESTエンドポイントに認証できません。以下の例は不正な401を返すXamarin.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を使用する場合、私は問題はありません。だから、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 –

関連する問題