我使用
创建了一个 .Net 8 Blazor 项目我将 Nuget 包添加到 .Client 项目中
Microsoft.Extensions.Http
添加到.Server 和.Client Program.cs
builder.Services.AddHttpClient();
以及 .Server Program.cs 的 API
app.MapGet("/hello", () =>
{
return "hello";
})
.RequireAuthorization();
然后我通过调用 Web API 更新了 Auth.razor 页面。此代码在没有预渲染的情况下执行,首先使用 Blazor Server,然后从第二次重新加载开始使用 Webasssembly。
@page "/auth"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
@rendermode @(new InteractiveAutoRenderMode(prerender: false))
@inject HttpClient Client
<PageTitle>Auth</PageTitle>
<h1>You are authenticated</h1>
<AuthorizeView>
Hello @context.User.Identity?.Name!
</AuthorizeView>
@Message
@code
{
private string Message;
protected override async Task OnInitializedAsync()
{
try
{
Message = await Client.GetStringAsync("https://localhost:7235/hello");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
启动应用程序时,我使用新的开箱即用身份系统注册/登录,并获取 cookie。
问题是,当HttpClient调用API时,仅使用WebAssembly,它使用浏览器中的cookie进行身份验证;当首先使用 Blazor Server 调用相同的代码时,API 调用未经过身份验证,并返回错误页面的 HTML。
工作流程:
如果我切换到“InteractiveWeb assembly”,它就可以工作。 如果我切换到“InteractiveServer”,它就不起作用。 如果我通过浏览器直接调用 API,它就可以工作。
我想要的是为两者使用一个代码库。 有没有办法让 HttpClient 在 Blazor 服务器第一次使用时使用 cookie 身份验证令牌?
或者需要创建多样化并在 Blazor-Server 时仅调用 C# 后端代码?
我也有同样的问题。这让我发疯。请帮忙。