2017-01-23 18 views
0

https webAPIコール、具体的にはGoogle Directions APIを作成しようとしています。ブラウザの中に直接URLを置くと、私が望む結果が得られるので、私は私のuriが正しいことを100%確信しています。https webAPIを呼び出す方法は?

今、私のPCLの中でwebapiをどうやって呼びますか? modernhttpとHttpClientを現在使用していますが、オプションがあればそこにオープンしています。

private async Task<string> GetJsonObjFromUrl(string urlRoutes) 
{ 
    HttpClient c = new HttpClient(new NativeMessageHandler()); 

    var resp = await c.SendAsync(new HttpRequestMessage(HttpMethod.Get, new Uri(urlRoutes))); 

    if (resp.IsSuccessStatusCode) 
    { 
     var json = await resp.Content.ReadAsStringAsync(); 

     return json; 
    } 

    return null; 
} 

私は間違っていますか?

編集:これは私が一晩中夢中になっていたので、ここに入れてください。上記の方法で、呼び出し側の方法を終わらせることを忘れてしまった。実行は直後に続き、決して戻って結果を得ることはありません。 HTTPSを使用する場合には

HttpClient httpClient = new HttpClient(); 
var json = await httpClient.GetStringAsync(Url); 

+0

「私は間違っていますか?」なぜあなたは何か間違っていると思いますか?コンパイル時エラーが出ていますか?例外?デッドロックですか?予想外の結果ですか? –

+0

コードはちょうどclient.SendAsync/GetStringAsyncの下のどこかでヒットしません。 – Farid

+0

@Faridこれを試してくださいhttps://developer.xamarin.com/guides/cross-platform/transport-layer-security/ – XTL

答えて

1

コードはどこでもclient.SendAsync/GetStringAsync

下回るヒット行きません

あなたのコールスタックがさらに上がっていると思われる場合、コードでResult/Wait/GetAwaiter().GetResult()がオンになっています聞いてください。 UIスレッドから呼び出された場合は、deadlock、私は自分のブログで説明します。

デッドロックは、asyncメソッドがUIコンテキストで再開しようとしたが、タスクの完了を待っているUIスレッドがブロックされているために発生します。 asyncメソッドはタスクを完了するために完了する必要があるため、デッドロックが発生します。

適切な修正は、Result/Waitawaitに置き換えることです。

0

\あなたのPCLの使用において:私は何も結果を...やったことがなかった理由です。アンドロイドで 、あなたの主な活動:iOS版で

protected override void OnCreate(Bundle bundle) 
{ 
    ServicePointManager.ServerCertificateValidationCallback +=(sender, cert, chain, sslPolicyErrors) => true; 
} 

、あなたのAppDelegate内:

public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
{ 
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 

    return base.FinishedLaunching(app, options); 
} 
+0

httpsで動作しないようです。これはhttpsで動作するはずですか? – Farid

+0

証明書が信頼できない場合は、ServerCertificateValidationCallbackを使用し、それを自分で受け入れてTLSセッションを確立してください。 –

+0

このような意味があります:http://stackoverflow.com/questions/22251689/make-https-call-using-httpclient? WebRequestHandlerクラスはXFにありません。どのようにしてTLSを確立できますか? – Farid

関連する問題