如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新

Posted

技术标签:

【中文标题】如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新【英文标题】:How to call a razor page from a Blazor component in a Server Side Blazor Application without causing a page refresh 【发布时间】:2019-12-30 21:54:22 【问题描述】:

我正在开发一个需要包含 cookie 身份验证的 Blazor 服务器端应用程序。我们创建了一个自定义登录页面组件,但为了创建 cookie,我需要调用 Razor 页面来创建 cookie。

有没有办法在不刷新页面的情况下调用剃须刀页面。

我尝试使用 UriHelper.NavigateTo,但不适用于非 Blazor 组件路由。

然后我尝试使用 javascript 调用来执行 window.location,但问题是这会导致浏览器刷新,从而重新创建我的所有实例(如 AppState、HttpClient),因此这些实例中的所有信息都是丢失(如 httpclient 标头等)。

我希望调用 razor 页面来创建一个 cookie,以使 httpclient 和 appstate 范围内的实例保持它们的值。

【问题讨论】:

如果你成功了,那个other页面就会有cookie。不是您的应用程序的页面。 SPA 中的 S 代表 Single。内置授权具有所有正确的部分和步骤。使用它或将其用作指南。登录是一个剃须刀页面,而不是 Blazor 组件。是有原因的。 从一开始我们就想使用内置的 Blazor 身份验证,但唯一的问题是我们找不到自定义平淡无奇的登录和注册页面的方法。我们尝试了 Identity 脚手架,但它在最新的 Visual Studio 2019 的最新 Preview 8 中有一个错误。关于如何自定义这些页面直到错误得到纠正有任何建议吗? 你解决了吗?我也有同样的问题。但我无法使用默认登录页面。 【参考方案1】:

我们尝试了 Identity 脚手架,但它在最新的 Preview 8 中有一个错误

我已经看到了这个错误,很容易纠正。你现在可以脚手架了。否则,

我们唯一的问题是我们找不到自定义平淡无奇的登录和注册页面的方法。

在 9 月底发布之前,也许您可​​以忍受这些“平淡无奇的页面”?


步骤,基于带有“个人用户帐户”的 Preview8 服务器端项目

注意:在此之前和之后在 Git 中提交更改是个好主意

在启动中暂时禁用此行:// endpoints.MapBlazorHub<App>(selector: "app"); 运行脚手架向导,添加所需的任何页面 再次取消注释endpoints.MapBlazorHub() 行 删除Pages/_ViewStart.cshtml 修复Pages/Shared/_Layout.cshtml,第一行缺少@using 修复Pages/Shared/_Loginpartial.cshtml,第二行缺少@inject

编译运行

【讨论】:

以上是关于如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何从 blazor(服务器端)Web 应用程序获取访问令牌?

如何将 Blazor 中的所有注册服务添加到 Simple Injector?

如何在服务器端 Blazor 中存储会话数据

如何在 blazor webassembly 项目中对服务器端控制器中的用户进行身份验证?

如何在 Blazor 服务器端模拟延迟?

如何向服务器端 Blazor 项目添加控制器(而非视图)支持