.Net 6 Windows Forms with Blazor services.AddHttpContextAcce



我正在尝试在Blazor应用程序的windows窗体中设置Blazor服务器身份验证系统。

我添加服务services.AddHttpContextAccessor();在我的创业公司,我添加了许多其他的服务。但是当我把这个服务注入到.razor文件时,这个服务是空的。

如何使这个工作?

一般来说,我不建议在任何地方使用IHttpContextAccessor,而且它不是与SignalR应用程序或Blazor应用程序一起工作的东西。要了解更多信息,你可以参考Blazor和共享状态和访问HttpContext。项目失败。

然而,如果你必须使用HttpContext,那么你必须在渲染_Host.cshtml时从HttpContext获得所需的值,并将其保存在一个变量中,并在程序其余部分的组件中以级联参数的形式使用该变量。

例如,我使用以下过程在Blazor Server web应用程序中获取HttpContext

工作方法是我先修改_Host.cshtml文件如下。这里我正在寻找access_token信息。

@{
    var token = await HttpContext.GetTokenAsync("access_token");
}

可以看到,我将access_token信息放入令牌变量中,并将其赋值给组件的param-AccessToken。然后转到App.razor文件并将AccessToken变量定义为级联值。如下:

<CascadingValue Name="AccessToken" Value="AccessToken">
<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>
@code{
    [Parameter]
     public string AccessToken { get; set; }
 }

最后,任何需要AccessToken值的组件只需要将其定义为级联参数。例如,我创建了一个名为ShowToken.razor的组件,并将其代码如下:

@page "/showtoken"
<p>This is part of the access token @(AccessToken != null ? AccessToken.Substring(0,30) : "(null)")</p>

@code {
    [CascadingParameter(Name = "AccessToken")] public string AccessToken { get; set; }
}

最新更新