【发布时间】:2021-06-02 14:38:20
【问题描述】:
我有一个 blazor wasm 托管应用程序,用户可以通过填写表格来创建帐户。创建帐户后,会向用户发送一封电子邮件,其中包含他/她必须遵循的链接以确认他/她对电子邮件地址的所有权。该链接指向我的服务器中的一个操作方法。同一台服务器托管 blazor wasm 应用和 API。
问题是,当用户单击该链接时,请求不会发送到服务器。相反,blazor 会拦截调用并尝试路由到页面。
我怎样才能做到这一点?如何创建指向我服务器中的操作的链接实际上在单击时将其发送到服务器?换句话说,如果可能的话,如何绕过 blazor 的路由系统?
更新:
- 我使用 Identity 作为后备存储(但这与我遇到的问题无关)。
- 我使用基本控制器
Url.Action("actionName", "controllerName", actionParam, Request.Scheme);中的Url 属性生成链接。目前,该链接看起来像https://localhost:5001/api/user/confirmaemail?confirmationtoken=xyz&useremail=abc - Action 是一个发布操作。
- 当 blazor 尝试重定向到页面时,它显然不能,因为我没有具有这种路由的页面。因此会显示
<NotFound />组件(App.razor 文件)中的内容。
注意:
这不是错误。这是 balzor wasm 的正常行为。如果应用托管在www.foo.com,那么所有对foo.com(例如www.foo.com/bar)的调用实际上都不会发送到foo.com,而是会被blazor拦截并视为应用中页面的路由.但是,这阻止了我,因为我的 API 与应用程序具有相同的基地址(该应用程序目前位于 localhost:5001/,API 位于 localhost:5001/api/xyz),因此,blazor 阻止调用服务器时我点击链接。问题是如何解决这个问题?如果不可能,我还需要哪些其他选项来实现此流程?
【问题讨论】:
-
您在项目中使用身份吗?此链接如何请求服务器(获取或发布)?重定向到其他页面时是否有任何错误?
-
@Karney。我更新了帖子以回答您的问题。
-
@GSerg 不是。您指向的问题更多是关于 blazor wasm(客户端)和 blazor 服务器端之间的区别。
-
它告诉你必须使用 HttpClient 或排序从客户端 Blazor 进行 POST 调用。
标签: c# asp.net-core blazor-webassembly blazor-client-side