在自定义类中访问 Blazor 服务器端的 AuthenticationStateProvider

Posted

技术标签:

【中文标题】在自定义类中访问 Blazor 服务器端的 AuthenticationStateProvider【英文标题】:Access AuthenticationStateProvider in Blazor Server Side in Custom Class 【发布时间】:2020-03-25 20:10:14 【问题描述】:

是否有关于如何 的一般指导? AuthenticationStateProvider 是否应该作为单例服务添加?还有其他方法可以使用 DI 吗?我不是在谈论使用 AuthorizeViews 或通过级联参数。我需要能够在自定义类中获取 AuthenticationStateProvider.GetAuthenticationStateAsync(),而不是控制器、视图等。

有什么想法吗?

【问题讨论】:

【参考方案1】:

感谢 Isaac 提供的信息,但我实际上能够回答我自己的问题。我的解决方案是确保我的助手类是作用域的,而不是单例的,以便获取 authstateprovider 的实例。

services.AddScoped<Classes.GlobalHelper>();

然后我可以像任何其他 DI 一样调用 authstateprovider,例如:

public async Task<HttpClient> MyHttpClient()

    AuthenticationState _authstate = _authStateProv.GetAuthenticationStateAsync().Result;

    HttpClient http = new HttpClient();
    string signedInUserID = _authstate.User.FindFirst(ClaimTypes.NameIdentifier).Value;

【讨论】:

为什么叫 Result ?您应该等待对 GetAuthenticationStateAsync 的调用。调用 Result 错误并阻塞。 在我完成之前粘贴了代码……是的……等待中。 有兴趣回答上述问题的人:***.com/a/62529030/6152891

以上是关于在自定义类中访问 Blazor 服务器端的 AuthenticationStateProvider的主要内容,如果未能解决你的问题,请参考以下文章

如何在 blazor 组件中显示来自后端的自定义引导警报

如何在 Blazor 类中注入服务(AuthenticationStateProvider)

在自定义 UIView 类中从 UIView 快速创建 IBoutlet [重复]

在自定义类中使用setMouseCallBack

Datepicker 不会显示在自定义 UITableViewCell 类中

什么是 Razor,它和 Blazor 有什么关系?