Blazor、.Net 8 和身份的全球交互问题

问题描述 投票:0回答:1

我一直在使用新的 .Net 8 Blazor 模板,并遇到了 Identity 和设置全局 InteractiveServer 渲染模式的问题。我所做的更改是在 App.Razor 文件中对 :

<Routes @rendermode="InteractiveServer" />

我添加此内容的原因是因为我还尝试集成 MudBlazor,这是它正常运行所必需的(至少据我所知)。 MS 确实通过文档列出了执行此操作的能力,因此似乎是设置此全局渲染模式的合理选择。

我随后面临的问题是使用 AccountLayout 组件的任何页面,例如登录、注册、重置密码等,因为它在这部分循环:

if (HttpContext is null)
{
    // If this code runs, we're currently rendering in interactive mode, so there is no HttpContext.
    // The identity pages need to set cookies, so they require an HttpContext. To achieve this we
    // must transition back from interactive mode to a server-rendered page.
    NavigationManager.Refresh(forceReload: true);
}

由于它是全局设置的,因此它总是会被点击,因此会进入无限的导航循环。我尝试设置帐户布局和/或帐户页面以使用 null、默认、静态等渲染模式,但它们似乎不是有效的选项,我也找不到任何人这样做的示例。

所以我的问题是,有谁知道一种方法可以在渲染模式的组件上设置默认/静态,或者知道一种方法可以让 MudBlazor 在 .net 8 项目中工作而不使用全局交互模式?我显然已经尝试使用 mudblazor 将渲染模式设置为在相关页面上进行交互。

blazor identity mudblazor .net-8.0
1个回答
8
投票

我发现这个问题目前似乎已被微软解决。在这些问题中,我确实在这个提出的问题中找到了解决方法:https://github.com/dotnet/aspnetcore/issues/51476

本质上是根据 url 在 app.razor 中全局更改渲染模式:

<body>
    <Routes @rendermode="RenderModeForPage" />
    <script src="_framework/blazor.web.js"></script>
    <script src="_content/MudBlazor/MudBlazor.min.js"></script>
</body>

@code {
    [CascadingParameter]
    private HttpContext HttpContext { get; set; } = default!;

    private IComponentRenderMode? RenderModeForPage => HttpContext.Request.Path.StartsWithSegments("/Account") ? null : InteractiveServer;
}

可以确认我已经尝试过此操作,并且身份页面和 MudBlazor 按照最初的预期在其他页面上工作。至少看来未来的模板应该已经包含此问题的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.