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

时间:2019-08-26 17:34:05

标签: authentication razor cookies blazor

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

有没有一种方法可以调用剃刀页面而无需刷新页面。

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

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

我希望通过以httpclient和appstate范围内的实例保留其值的方式调用剃刀页面来创建cookie。

2 个答案:

答案 0 :(得分:2)

  

我们尝试了身份支架,但是在最新的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

编译并运行

答案 1 :(得分:0)

  

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

不是。 NavigateTo获取两个参数:第一个是uri,第二个是布尔值,名为forceLoad,如果为true,它将绕过客户端路由,并强制浏览器从服务器加载新页面,而无论是否正常处理URI通过客户端路由器。换句话说,它在Blazor的JavaScript部分的 window.location 上执行。

结论:不可能...一旦尝试超出路由器的限制,页面刷新是不可避免的。请记住,Blazor应用程序呈现在单个页面上,因此,一旦导航到新页面,上一个页面就会过期。

希望这对您有帮助...