放浪軍師のアプリ開発局

VTuberみたいなアプリケーション夏狂乱など、自由気ままにアプリを開発したりしています。他にもいろいろやってます。尚、このブログはわからないところを頑張って解決するブログであるため、正しい保証がありません。ご注意ください。

Blazor WebAssembly と Azure Functions を ローカルでデバッグする

今回も Blazor がんばります放浪軍師です。年内には燻製アプリを作るヨ!たぶん…きっと…うん。

Blazor WebAssembly と Azure Functions を ローカルでデバッグする

以前の記事でやりかたワカランと書いたんですが、以下の公式演習にそのやり方が載っていましたので残しておこうと思います。

docs.microsoft.com

環境

Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.0.0 Microsoft.AspNetCore.Components.WebAssembly 5.0.5

GitHub

参考になれば幸い github.com

手順

1. launchSettings.json の作成

Azure Functions のプロジェクトに存在する Properties ディレクトリ配下に launchSettings.json を作成して以下の内容にします。

{
    "profiles": {
        "Api": {
        "commandName": "Project",
        "commandLineArgs": "start --cors *"
        }
    }
}

2. マルチスタートアッププロジェクトを指定

ソリューションを右クリック→「スタートアッププロジェクトの設定」にてマルチスタートアッププロジェクトを選択し、Azure Functions のプロジェクトと Blazor のプロジェクトのアクションを「開始」にする。 f:id:roamschemer:20211130001632p:plain

3. appsettings.Development.json の作成

Blazor プロジェクトに存在する wwwroot ディレクトリ配下にデバッグ時の環境変数ファイル appsettings.Development.json を作成して以下の内容にします。

{
  "API_Prefix": "http://localhost:7071"
}

4. Program.cs の修正

Blazor プロジェクトに存在する Program.cs にて HttpClient を DI コンテナに登録している箇所を以下のように修正して、環境変数からローカル起動するAPIのアドレスをしていするようにします。

//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.Configuration["API_Prefix"] ?? builder.HostEnvironment.BaseAddress) });

5. 実行

おもむろにデバッグをします。Blazor 側から AzureFunctions を叩く事ができる事が確認できるはずです。

まとめ

Program.cs を変更する説明が演習に無かったので無駄に時間がかかりましたよちくしょー!考えればすぐにわかるはずなのに…実力不足にむせび泣きました。関係ないのに唐突に local.settings.json の説明がでてくるのが不思議だったんだよ…。たぶんこれ演習の説明ミスだね。