Blazor、EntityServer4 路由登录

Posted

技术标签:

【中文标题】Blazor、EntityServer4 路由登录【英文标题】:Blazor, EntityServer4 routing to login 【发布时间】:2021-03-25 10:53:06 【问题描述】:

在带有身份验证模板的 Blazor WebAssembly(托管)中,标题上的登录按钮是

<a href="authentication/login">Log in</a>

但是,在服务器上,登录页面位于:

/Areas/Identity/Pages/Account/Login (.cshtml)

注意:cshtml页面有@page指令但没有指定roue。

那么,系统如何将“authentication/login”解析为“/Areas/Identity/Pages/Account/Login”?

【问题讨论】:

【参考方案1】:
<a href="authentication/login">Log in</a>

href 属性的值是一个相对的本地 url...它指向客户端应用程序中的身份验证组件。 url的第二段login实际上是传递给Authentication组件的参数。这是组件的定义:

Authentication.razor

@page "/authentication/action"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />

@code
    [Parameter] public string Action  get; set; 

请注意,login 字符串分配给处理远程身份验证操作的 RemoteAuthenticatorView 组件的 Action 属性。 在这种情况下,告诉她我们希望登录用户。如果您有兴趣了解 url 是如何创建的并遵循身份验证的整个过程,您可以查阅此过程中涉及的类......不过,我认为这是浪费时间。而且很复杂。

cshtml页面有@page指令但没有指定roue

这是 Razor 页面页面,而不是 Razor 页面组件。 Razor 页面组件(也称为可路由)必须使用 @page 指令和路由模板进行注释,例如:@page "/counter"。这告诉 Blazor 当前组件是可路由的,并且它的相对 url 在路由模板中给出 在 Razor Pages 页面(例如 Login.cshtml)中,@page 指令(没有路由模板)“使文件成为 MVC 操作 - 这意味着它直接处理请求,无需通过控制器。”

【讨论】:

以上是关于Blazor、EntityServer4 路由登录的主要内容,如果未能解决你的问题,请参考以下文章

Blazor_WASM之4:路由

Blazor University (24)路由 —— 可选路由参数

Blazor University (22)路由 —— 定义路由

Blazor University (23)路由 —— 路由参数

Blazor University (25)路由 —— 通过 HTML 导航

Blazor University (27)路由 —— 检测导航事件