クイック スタート: Web API のサンプル (C#)
このクイック スタートでは、ターゲットの Microsoft Dataverse 環境に接続して、Web API WhoAmI 関数を呼び出すための簡単なコンソール アプリケーションを作成します。 この関数は、ログオンした Dataverse ユーザーに関する情報を取得します。 ここで説明する基本的な機能を理解したら、Dataverse テーブルの行を作成、取得、更新、削除するなど、他の Web API 操作に進むことができます。
このプログラムは、HttpClient を認証して使用し、GET 要求を WhoAmI Function に送信し、応答は WhoAmIResponse ComplexType となります。 その後、プログラムは応答から取得した UserId プロパティ値を表示します。
注意
これは、最小限のコードで接続する方法を示す、非常に単純な例です。 強化されたクイック スタートは、より優れたデザイン パターンを適用するために、このサンプルに基づいてビルドされています。
この (.NET Framework) プロジェクトの完全な Visual Studio ソリューションは、PowerApps-サンプル リポジトリの cds/webapi/C#/QuickStart に記載されています。 cds/webapi/C#-NETx/QuickStart の下に、サンプルの .NET 5 バージョンもあります。
前提条件
- Visual Studio 2019
- インターネット接続
- Dataverse 環境に有効なユーザー アカウント
- 接続に使用したい Dataverse 環境への URL
- Visual C# 言語の基本的な理解
注意
認証するには、アプリを Azure Active Directory (AD) に登録する必要があります。 このクイック スタート サンプルは、Microsoft が公開している実行中のサンプル コードの目的で使用できるアプリ登録 clientid 値を示します。 ただし、独自のカスタム アプリケーションの場合は、それを AD に登録する必要があります。 詳細: チュートリアル: Azure Active Directory でアプリを登録する
Visual Studio プロジェクトの作成
Visual Studio を起動して、新しいプロジェクトの作成 を選択します。
新しいコンソール アプリ (.NET Framework) プロジェクトを作成します。
.NET Framework 4.6.2 を使用するようにプロジェクトを構成します。
Solution Explorer で、作成したプロジェクトを右クリックして、コンテキスト メニューで NuGet パッケージの管理 を選択します。 プロジェクトに必要なアセンブリを取り込みます。
Microsoft.IdentityModel.Clients.ActiveDirectoryNuGet パッケージを探し、それを選択し、次に インストール 選択します。注意
アセンブリの追加をプレビューして OK をクリックし、インストールされたパッケージとその内容の使用許諾契約を 承認 するよう求められます。
Azure Active Directory 認証ライブラリ (ADAL) の代わりに、マイクロソフト認証ライブラリ (MSAL) を使用するには、
Microsoft.IdentityModel.Clients.ActiveDirectoryの代わりにMicrosoft.Identity.Clientパッケージをインストールします。Newtonsoft.JsonNuGet パッケージを参照して、最新バージョンをインストールします。
Program.cs を編集する
次の手順に従って、メイン プログラムのコードを追加します。
- Program.cs のコンテンツ全体を次のコードに置き換えます。 プロジェクトに WebAPIQuickStart とは異なる名前を使用した場合、プロジェクト名と一致するように、新しいコードで名前空間名に変更する必要があります。
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Newtonsoft.Json.Linq;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
namespace WebAPIQuickStart
{
class Program
{
static void Main()
{
// TODO Specify the Dataverse environment URL to connect with.
string resource = "https://<env-name>.<region>.dynamics.com";
// Azure Active Directory app registration shared by all Power App samples.
// For your custom apps, you will need to register them with Azure AD yourself.
// See https://docs.microsoft.com/powerapps/developer/data-platform/walkthrough-register-app-azure-active-directory
var clientId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
var redirectUri = new Uri("app://58145B91-0C36-4500-8554-080854F2AC97");
#region Authentication
// The authentication context used to acquire the web service access token
var authContext = new AuthenticationContext(
"https://login.microsoftonline.com/common", false);
// Get the web service access token. Its lifetime is about one hour after
// which it must be refreshed. For this simple sample, no refresh is needed.
// See https://docs.microsoft.com/powerapps/developer/data-platform/authenticate-oauth
var token = authContext.AcquireTokenAsync(
resource, clientId, redirectUri,
new PlatformParameters(
PromptBehavior.SelectAccount // Prompt the user for a logon account.
),
UserIdentifier.AnyUser
).Result;
#endregion Authentication
#region Client configuration
var client = new HttpClient
{
// See https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors#web-api-url-and-versions
BaseAddress = new Uri(resource + "/api/data/v9.2/"),
Timeout = new TimeSpan(0, 2, 0) // Standard two minute timeout on web service calls.
};
// Default headers for each Web API call.
// See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors#http-headers
HttpRequestHeaders headers = client.DefaultRequestHeaders;
headers.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
headers.Add("OData-MaxVersion", "4.0");
headers.Add("OData-Version", "4.0");
headers.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
#endregion Client configuration
#region Web API call
// Invoke the Web API 'WhoAmI' unbound function.
// See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/compose-http-requests-handle-errors
// See https://docs.microsoft.com/powerapps/developer/data-platform/webapi/use-web-api-functions#unbound-functions
var response = client.GetAsync("WhoAmI").Result;
if (response.IsSuccessStatusCode)
{
// Parse the JSON formatted service response to obtain the user ID.
JObject body = JObject.Parse(
response.Content.ReadAsStringAsync().Result);
Guid userId = (Guid)body["UserId"];
Console.WriteLine("Your user ID is {0}", userId);
}
else
{
Console.WriteLine("Web API call failed");
Console.WriteLine("Reason: " + response.ReasonPhrase);
}
#endregion Web API call
// Pause program execution.
Console.ReadKey();
}
}
}
上記のコードの TODO コメントのすぐ下で、
resource値を Dataverse テスト環境の実際の URL と置換します。 テスト環境の URL 値を見つけるには、次の手順に従います。- ブラウザーで Power Apps に移動します。
- (検索フィールドの右側にある) 環境アイコンを選択し、テスト環境を選択します。
- 設定アイコン
を選択し、 開発者のツールとリソース を選択します。 - Web API エンドポイントの URL を、/api/data/v9.x. はそのままにして「https:」から「.com」までコピーします。
- プログラム コードのリソース文字列値を、そのエンドポイント URL 値に置き換えます。 例:
string resource = "https://contoso.api.crm.dynamics.com";
プログラムを実行する
F5 キーを押して、プログラムをビルドして実行します。 出力は次のようになります。
Your user ID is 969effb0-98ae-478c-b547-53a2968c2e75コンソール ウィンドウがアクティブな状態で、任意のキーを押してプログラムを終了します。
ご報告:
Web API に正常に接続されました。
クイック スタートのサンプルでは、 Visual Studio プロジェクトを作成する簡単な方法を示しており、例外処理やアクセス トークンを更新するメソッドは使用していません。
これは、接続できることを確認するのには十分ですが、必ずしもアプリを構築するための優れたパターンを表すわけではありません。
拡張クイック スタート トピックでは、例外処理メソッド、接続文字列を使用した基本認証メソッド、アクセス トークンを更新するための再利用可能なメソッドを実装する方法を示し、データ操作を実行するための再利用可能なメソッドを構築する方法について説明します。
次のステップ
より優れた設計のためのコードを構造化する方法を説明します。
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。
フィードバック
フィードバックの送信と表示