Zum*_*pel 5 asp.net httpcontext blazor-server-side
我有一个托管在 Azure 上的 ASP.NET Blazor Web 应用程序。一切正常,除了一件小事。我按照文档IHttpContextAccessor.HttpContext中的描述使用。
public class SessionService : ISessionService
{
private readonly IHttpContextAccessor httpContextAccessor;
private readonly IUserService userService;
public SessionService(
IUserService userService,
IHttpContextAccessor httpContextAccessor)
{
this.userService = userService;
this.httpContextAccessor = httpContextAccessor;
}
public async Task<User> GetUser()
{
var userId = this.httpContextAccessor.HttpContext?.Items["userId"]?.ToString();
if (userId == null)
{
return null;
}
if (!int.TryParse(userId, out var parsedUserId))
{
return null;
}
return await this.userService.Get(parsedUserId);
}
/// <inheritdoc />
public async Task AuthenticateUser()
{
if (this.httpContextAccessor.HttpContext == null)
{
return;
}
// Authentication Logic
// ...
this.httpContextAccessor.HttpContext.Items["userId"] = authenticatedUser.id;
}
}
Run Code Online (Sandbox Code Playgroud)
我后来将此代码称为类似:
var user = await sessionService.GetUser();
if (user == null)
{
await sessionService.AuthenticateUser();
user = await sessionService.GetUser();
}
Run Code Online (Sandbox Code Playgroud)
这适用于迄今为止我测试过的每台本地计算机。我在发布或调试中构建它并不重要。所有数据均已正确加载,我可以检索当前登录用户的 ID。
无论如何,如果我将应用程序发布到 azure,则 HttpContext 始终为 null。我现在已经多次检查文档,但找不到任何可以推动我走向正确方向的内容。我需要配置一些东西来专门使用 HttpContext 吗?
您需要注入AuthenticationStateProvider才能从图表中获取信息,请不要使用IHttpContextAccessor ,因为它存在安全问题,您可以在microsoft doc中阅读更多相关信息。
如何使用AuthenticationStateProvider:
在 blazor 页面中注入AuthenticationStateProvider如下:
[Inject]
public AuthenticationStateProvider AuthenticationState { get; set; }
protected override async Task OnInitializedAsync()
{
var AuthSate = await AuthenticationState.GetAuthenticationStateAsync();
var user = AuthSate.User;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1790 次 |
| 最近记录: |