如何在 Blazor Server 中使用身份验证命中内部 API?

How do I hit internal API with Authentication in Blazor Server?

提问人:Jordan772 提问时间:11/15/2023 最后编辑:NimanthaJordan772 更新时间:11/20/2023 访问量:102

问:

我的控制器中有一个 API 端点:

[HttpDelete("delete/{id}")]
public async Task<IActionResult> DoSomething(int id)
{
    var user = await userManager.GetUserAsync(User);
}

我有一个 Blazor 页面,我想在其中调用它:

private async Task MyAction()
{
    var result = await HttpClient.DeleteAsync($"/api/mycontroller/delete/{someId}");
}

我已登录到 Blazor 页面,我想将标识/身份验证传递给 API 控制器。就我而言,控制器端的 GetUserAsync 始终返回 null。我正在使用默认的 Identity.Application 身份验证 sheme。

我尝试使用IHttpContextAccessor中的数据修改请求标头,但我没有让它工作,我认为这不是您应该这样做的方式。

C# ASP.NET-Core Blazor Blazor -服务器端

评论

0赞 Ronaldoz 11/16/2023
如果使用 AppContext 获取 usermanager,则它在 blazor server 应用中不起作用。您是否尝试过 AuthenticationStateProvider,它可以获取用户。learn.microsoft.com/en-us/aspnet/core/blazor/security/......

答:

0赞 Jordan772 11/17/2023 #1

我通过将身份验证cookie复制到HttpClient来修复它。

var token = HttpContextAccessor.HttpContext?.Request.Cookies[".AspNetCore.Identity.Application"];
HttpClient.DefaultRequestHeaders.Add("Cookie", $".AspNetCore.Identity.Application={token}");