クイック スタート: Blazor Server Web API サンプル (C#)

このクイック スタートでは、Blazor Server アプリケーションを作成して、Web APIを使用した Microsoft Dataverse 環境に接続します。

認証して、HttpClient を使用して WhoAmI 関数 を含む GET リクエストを送信します。 この応答は、WhoAmIResponse ComplexType です。 通話完了後、WhoAmIResponse プロパティが表示されます。

注意

これは、最小限のコードで接続する方法を示す、非常に単純な例です。

前提条件

  • Visual Studio 2022 年には ASP.NET とウェブ開発 ワークロードが必要です。
  • .NET 7.0 SDK.
  • Microsoft Azure ポータルに関する知識。
  • インターネット接続。
  • Dataverse インスタンスに有効なユーザー アカウント。
  • アプリケーションへの登録を許可する管理者アクセス。
  • 接続に使用する Dataverse 環境への URL。
  • Visual C# 言語の基本的な理解。

注意

認証するには、アプリを Microsoft Entra ID に登録する必要があります。 登録はテンプレート作成の一部として自動的に行われますが、Azure portal では追加の更新が必要になります。

Visual Studio プロジェクトを作成する

  1. Visual Studio 2022 を開いて、新しいプロジェクトの作成を選択します。

    Visual Studio 2022 を開きます

  2. 新規プロジェクトの作成 ダイアログで、Blazor Server App を検索します。 テンプレートを選び、次へを選びます。

    新しいプロジェクトの作成

  3. 新規プロジェクトの構成 ダイアログで、プロジェクト名場所 を設定します。 続いて 次へ を選択します。

    プロジェクト名と場所を入力する

    この例では、 プロジェクト名 として DataverseWebApiBlazorServerQuickStart を使用します。

  4. 詳細情報 ダイアログで、フレームワーク認証の種類 を指定します。

    この例では、フレームワークは .NET 7.0 (Standard Term Support) です。

    重要

    認証の種類Microsoft ID プラットフォーム に設定する。

    認証の種類を Microsoft ID プラットフォームに設定する

  5. 作成 を選択してプロジェクトを作成します。

  6. プロジェクト テンプレートにより、必要なコンポーネント ダイアログが開きます。 次へ を選択します。

    必須コンポーネント

  7. Microsoft ID プラットフォーム ダイアログで、選択した Azure アカウントに Microsoft Entra ID のアプリケーションを管理する権限があり、選択したテナントが Power Platform 環境に関連付けられたものであることを確認してください。

    Microsoft ID プラットフォーム ダイアログ

  8. 新規作成を選択します。

  9. アプリケーションの登録 ダイアログで、 表示名 を設定し、 登録 をクリックしてダイアログを閉じます。

    アプリケーションの登録

    この例では、 Dataverse Web Api Blazor Server Quick Start という名前を使用しています。 後のステップで、この名前を使用してアプリケーションを検索します。

  10. 次へ を選択します。

    注意

    このステップでは何もする必要はありません。

    この手順では、Microsoft Graph または別の API に接続する機能が提供されますが、このクイックスタートでは別の API に接続する必要はありません。

    追加設定ステップ。

  11. 次へ を選択します。 このステップでは、プロジェクトに加えられた変更を要約します。

    変更の概要

  12. 完了 を選択します。

    依存関係の構成の進行状況 ダイアログには、アプリケーションを登録するためにテンプレートによって実行される自動化された手順が表示されます。

    依存関係の構成の進行状況

  13. 閉じる を選択して、ダイアログ ボックスを閉じます。

Microsoft Entra ID でのアプリケーションの構成

Visual Studio テンプレートは、提供された情報を使用して登録アプリケーションを作成しました。 Dataverse に接続するには、追加のアクセス許可が必要です。

  1. Power Platform 管理センター から、管理センター > Microsoft Entra ID を選択します。

     Power Platform 管理センターの Microsoft Entra ID 管理センター

  2. Microsoft Entra 管理センター で、アプリの登録 内で作成されたアプリケーションを名前で検索します。

    アプリケーション登録を検索する

  3. アプリケーションを開き、API 権限 を選択します。 アクセス許可の追加 を選択します。

    API アクセス許可

  4. API 権限の要求 フライアウトで、自分の組織が使用する API タブを選択して、Dataverse を検索します。

    自分の組織が使用している API で Dataverse を選択します

  5. Dataverse を選択すると、Dynamics CRM API が開きます。

  6. user_impersonation 委任されたアクセス許可を選択してから、アクセス許可の追加を選択します。

    user_impersonation 委任権限を追加します

  7. 認証とシークレット を選択してから 新しいクライアント シークレット を選択します。

    証明書とシークレット

  8. クライアント シークレットの追加 フライアウトで、説明有効期限を入力してから、追加を選択します。

    クライアント シークレットの追加

    重要

    今すぐシークレットをコピーします。 このページから移動するとアクセスできなくなります。

    クライアント シークレットをコピーする

  9. Visual Studio で、Blazor Server アプリ プロジェクト内で、appsettings.json を開き、シークレット値を使用して ClientSecret のエントリを追加します。 appsettings.json ファイルのコンテンツは、次のようになります。

    {
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "<your org>.onmicrosoft.com",
        "TenantId": "<your tenantid>",
        "ClientId": "<your clientid>",
        "CallbackPath": "/signin-oidc",
        "ClientSecret": "<your secret>"
    },
    "Logging": {
        "LogLevel": {
        "Default": "Information",
        "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*"
    }
    

アプリの編集

Dataverse への呼び出しを有効にするには、アプリケーションで 3 つのファイルを編集する必要があります。

  • appsettings.json
  • Program.cs
  • Pages/FetchData.razor

appsettings.json

他のファイルには、Dataverse Web API へのアクセスに使用されるベース URI への参照が必要な場所がいくつかあります。 このデータを appsettings.json に追加すると、このデータを 1 か所に設定できるようになります。

以下の "AllowedHosts": "*" を追加します。<your org> は、Dataverse Web APIにアクセスするためのベース URL を表します。 これが何かわからない場合は、Web API URL とバージョンを参照してください。

  "AllowedHosts": "*",
  "DataverseConfig": {
    "BaseUri": "https://<your org>.api.crm.dynamics.com/"
  }

注意

次のことを確認してください:

  • JSON が有効になるように、"AllowedHosts": "*" の後にコンマを追加します。
  • BaseUri 値を "/" で終了します。

Program.cs

  1. 設定で Web API ベース URI の値にアクセスするには、以下の行を Main メソッドで、// Get BaseUri from appsettings.json でコメント化して行の下に追加します。
    var builder = WebApplication.CreateBuilder(args);

    public static void Main(string[] args)
    {
      var builder = WebApplication.CreateBuilder(args);
    
      // Get BaseUri from appsettings.json
      string dataverseBaseUri = builder.Configuration.GetSection("DataverseConfig").GetValue<string>("BaseUri");
    
  2. 行の下に次の 2 行を追加します。
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))

    // Add services to the container.
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
      .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
        .EnableTokenAcquisitionToCallDownstreamApi(new string[] { $"{dataverseBaseUri}user_impersonation" })
        .AddInMemoryTokenCaches();
    

Pages/FetchData.razor

デフォルトの Pages/FetchData.razor コンポーネントは、天気予報データを取得します。 これを完全に交換していきます。

次のコードをコピーして、Pages/FetchData.razor 内のすべてのコードを置き換えます。

@page "/fetchdata"
@using Microsoft.Identity.Client;
@using Microsoft.Identity.Web
@using System.Text.Json;
@inject MicrosoftIdentityConsentAndConditionalAccessHandler ConsentHandler
@inject IHttpClientFactory HttpClientFactory
@inject Microsoft.Identity.Web.ITokenAcquisition TokenAcquisitionService
@inject IConfiguration configuration;

<PageTitle>WhoAmI</PageTitle>

<h1>WhoAmI</h1>

<p>This component demonstrates fetching data from Dataverse.</p>

@if (WhoIAm == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Property</th>
                <th>Value</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>BusinessUnitId</td>
                <td>@WhoIAm.BusinessUnitId</td>
            </tr>
            <tr>
                <td>OrganizationId</td>
                <td>@WhoIAm.OrganizationId</td>
            </tr>
            <tr>
                <td>UserId</td>
                <td>@WhoIAm.UserId</td>
            </tr>
        </tbody>
    </table>
}

@code {
    private WhoAmIResponse WhoIAm;
    private HttpClient _httpClient;

    protected override async Task OnInitializedAsync()
    {
        string baseUrl = configuration["DataverseConfig:BaseUri"];

        // Get the HttpClient
        _httpClient = HttpClientFactory.CreateClient();
        
        // Get the token
        var token = string.Empty;
        try
        {
            token = await TokenAcquisitionService.GetAccessTokenForUserAsync(new string[] { $"{baseUrl}user_impersonation" });
        }
        // Microsoft Identity Web specific exception class for use in Blazor or Razor pages to process the user challenge. 
        // Handles the MsalUiRequiredException.
        catch (MicrosoftIdentityWebChallengeUserException ex)
        {
            ConsentHandler.HandleException(ex);
        }
        catch (Exception)
        {
            throw new Exception("Error getting access token.");
        }

        // Set the auth token
        _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

        // Send the request
        var dataRequest = await _httpClient.GetAsync($"{baseUrl}api/data/v9.2/WhoAmI");

        if (dataRequest.IsSuccessStatusCode)
        {
            var jsonString = System.Text.Json.JsonDocument.Parse(await dataRequest.Content.ReadAsStreamAsync());
            WhoIAm = JsonSerializer.Deserialize<WhoAmIResponse>(jsonString);
        }
        else
        {
            throw new Exception("Error sending request.");
        }
    }

    // Used with System.Text.Json.JsonSerializer.Deserialize to deserialize response body
    public class WhoAmIResponse
    {
        public Guid BusinessUnitId { get; set; }
        public Guid OrganizationId { get; set; }
        public Guid UserId { get; set; }
    }

}

プログラムを実行する

このアプリケーションの準備ができました。

  1. F5 キーを押してプログラムを実行します。 プログラムを初めて実行すると、次の同意ダイアログが表示されます。

    同意ダイアログ

  2. 承諾を選択します。

  3. データの取り込み を選択します。

    出力は次のように表示されます。

    最終結果

ご報告: Web API に正常に接続されました。

このクイック スタートでは、Dataverse のデータに接続する Blazor Server Web アプリケーションを作成する簡単な方法を示します。

サービス ドキュメントを理解することで、Dataverse Web API 機能の詳細を学びます。

関連情報

チュートリアル: Dataverse を使用して ASP.NET Core Blazor WebAssembly アプリを作成します
チュートリアル:認証にMicrosoft IDプラットフォームを使用するBlazorサーバー アプリを作成する

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。