大山さん、こんにちは。フォーラムオペレーターのRainaです。
Microsoft Q&A フォーラムにご投稿くださいましてありがとうございます。
セッションはサーバ側に存在し、ASP.NET Core により、セッション ID を含む cookie がクライアントに提供されて、セッションの状態が維持されます。
https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0#session-state
Webassemblyバンドルがダウンロードされ、ブラウザで実行されます。そのため、セッションに直接アクセスできません。
また、ログインすると、ユーザー情報はセッションに保存されません。たとえば、Cookie認証でmvcアプリを保護する場合、クレームはCookieに保存され、リクエストを送信するたびに、UserClaimsは認証ミドルウェアによってCookieから読み取られます。
あなたの状況では、ユーザー情報を公開するAPIエンドポイントを作成し、httpclientを使用してWebAssemblyからエンドポイントにリクエストを送信して値を取得することができます。
httpclient のハンドラーを作成する:
public class CookieHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
return await base.SendAsync(request, cancellationToken);
}
}
Register the handler/httpclient
builder.Services
.AddTransient<CookieHandler>()
.AddScoped(sp => sp
.GetRequiredService<IHttpClientFactory>()
.CreateClient("API"))
.AddHttpClient("API", client => client.BaseAddress = new Uri(apiAddress)).AddHttpMessageHandler<CookieHandler>();
サーバー側で’corsポリシーを構成する時に、AllowCredentialsを設定する:
app.UseCors(
x => x.AllowCredentials()
.......
);
どうぞよろしくお願いします。
参考になった投稿には「回答を承認する」と投票をご設定ください。さらに質問がある場合は、「コメント」を追加してください。 注意:Q&Aからメール通知を受け取りたい場合には、ドキュメントの手順に基づいて、メール通知を有効にしてください。 Regards, Raina