我一直在使用新的 .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 将渲染模式设置为在相关页面上进行交互。
我发现这个问题目前似乎已被微软解决。在这些问题中,我确实在这个提出的问题中找到了解决方法: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 按照最初的预期在其他页面上工作。至少看来未来的模板应该已经包含此问题的解决方案。