2016-04-10 26 views
0

で処理されませんでした。WindowsフォームアプリケーションをAzure ADに認証するWindowsフォームアプリケーションを開発しています。'System.Net.Http.HttpRequestException'はmscorlib.dllで発生しましたが、ユーザーコード

私はいくつかの問題があり、オンラインのリソースはすべて古くなっているようです。

私はwebapiとネイティブクライアントのapiとwindowsフォームアプリケーションを作成しました。

"oauth2Permissions" 次のように私は、マニフェストファイルが更新されているウェブAPIで

:私は2年間のエントリを追加した[

{ 

    "adminConsentDescription": "Allow the application to access ftpwebapi on behalf of the signed-in user.", 

    "adminConsentDisplayName": "Access ftpwebapi", 

    "id": "4eebeb18-aee6-408a-bea1-c090766dce23", 

    "isEnabled": true, 

    "origin": "Application", 

    "type": "User", 

    "userConsentDescription": "Allow the application to access ftpwebapi on your behalf.", 

    "userConsentDisplayName": "Access ftpwebapi", 

    "value": "user_impersonation" 

} 

]、

とキーの下に追加すると、 webapiをネイティブクライアントアプリケーションに追加しました。

Windowsフォームでは、以下のコードをボタンクリックイベントに追加しました。

プライベート非同期無効のbutton1_Click(オブジェクト送信者、EventArgsの電子)

{ 

     string authority = "https://login.windows.net/****"; 

     string resourceURI = "https://***.com/WebApplication3"; 

     string clientID = "********-5815-4358-****-*********"; 

     Uri returnURI = new Uri("http://********.com"); 

     AuthenticationContext authContext = 

      new AuthenticationContext(authority); 

     AuthenticationResult authResult = 

      authContext.AcquireToken(resourceURI, clientID, returnURI); 

     string authHeader = authResult.CreateAuthorizationHeader(); 

     // don't do this in prod 

     System.Net.ServicePointManager.ServerCertificateValidationCallback = 

      ((s, c, c2, se) => true); 

     HttpClient client = new HttpClient(); 

     HttpRequestMessage request = 

      new HttpRequestMessage(HttpMethod.Get, "https://localhost:***/task/api/"); 

     request.Headers.TryAddWithoutValidation("Authorization", authHeader); 

     var response = await client.SendAsync(request); 

     string responseString = await response.Content.ReadAsStringAsync(); 

     MessageBox.Show(responseString); 

}

それは今のところ正しい方法ですか?

そして、私は

VAR応答でエラーをagetting午前= client.SendAsync(要求)を待ちます。

タイプ「System.Net.Http.HttpRequestException」の例外がのMscorlib.dllで発生したが、ユーザーコードで

追加情報を扱っていなかった。要求を送信中にエラーが発生しました。

+0

sendAsyncにtry/catchを追加し、例外コンテンツを送信してください。{ var response = await client.SendAsync(request); (HttpRequestException e) { } Console.WriteLine(e.InnerException.Message); } –

答えて

0

これらの変数を正しく設定してからコードを実行しますが、最初は同じエラーが表示されます。それから私はhttpRequestMessage request =new HttpRequestMessage(HttpMethod.Get, "https://localhost:***/task/api/")の私のrequesturlを変更します。

これで正常に実行されました。あなたのURLがhttps://localhost:***/task/api/であることを確認して、ポートをlocalhost:***で再確認してください。

hereから詳細を入手するためのチュートリアルをお読みください。

+0

ありがとうリリー、私はazurから私のネイティブクライアントアプリケーションのリダイレクトURIにrequesturlを変更しました。それは働いた – Rinu

+0

こんにちはリーン、なぜあなたはネイティブアプリを呼び出すのですか?私はネイティブアプリをAPIとして使うことはできないと思いますか?私はあなたのコードをネイティブのアプリケーションを介してwebapiを呼び出すことを達成するために、私は 'requesturl'にwebapiのURLを設定し、nativeappのIDを' clientID'に設定します。 –

+0

ネイティブのアプリケーションは、(webapiからのパーミッションを持っています)上記のURIのネイティブクライアントアプリケーションのリダイレクトURIを使用してください。これはhttp:// globalのようなものです。com/task/api/no port numberはそこにあり、 – Rinu

関連する問題