问题标签 [blazor-webassembly]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 登录 Blazor 应用程序时重定向错误
我使用 ASP.NET Core 3.1 Blazor webassembly 应用程序(由 Visual Studio 2019 创建的默认应用程序)。
我为用户管理连接了 ASP.NET Identity,添加了脚手架的 Identity 项(登录、注册等)
当我单击Register时,应用程序正确重定向到
但是如果我单击Login,应用程序将重定向到
这是错误的(我希望https://localhost:44349/Identity/Account/Login
)
LoginDisplay.razor:
我错过了什么?
c# - Azure ASP.NET Core POST 400 错误请求 Blazor Webassembly
我一直在尝试在 Azure App Service 上部署我的 asp.net core 托管的 blazor webassembly 应用程序,但是,我无法让 api 正常工作。当我尝试将用户的数据保存在数据库中时,我收到 400 bad request 错误。它在本地主机上运行良好。我环顾四周,发现建议我使用 Azure 中的日志流来获取更详细的错误消息,虽然我不确定这些细节是否真的有帮助,但还是在这里。
这是相关的应用程序代码:
在发布项目时,我为“用户”配置了 Azure SQL 数据库,选中复选框以在运行时使用 UsersConnection 字符串,并在发布时应用 UserContext 实体框架迁移。
我用的是visual studio 2019,目标框架是netcoreapp3.1。我会很感激任何指导。谢谢!
编辑
查看详细日志后,显然甚至没有创建数据库?
internet-explorer-11 - 强制 Blazor WebAssembly 应用从 IE11 打开 Edge 窗口
我正在摆弄 Blazor WebAssembly 来制作 PoC,并试图说服一些人开始使用它来开发 Intranet Web 应用程序。但是,我们用于 Intranet 内容的标准浏览器是 IE11。由于 IE11 不支持 Blazor WebAssembly,它可能是世界上最好的东西,但我相信我们不会通过说“这不能在 IE11 中运行,所以人们必须使用 Edge 来完成这个特定的应用程序”。
为了尽量减少这个问题,我想知道如何在 Edge 上打开一些 URL。我知道这是可能的,因为如果我将 Teams 会议 URL 粘贴到 IE11 上,页面不会呈现,而是会自动打开一个新的 Edge 窗口。有谁知道如何做到这一点?
blazor - 使用服务器端检查验证 Blazor WebAssembly EditForm
对于 Blazor WebAssembly,我看到很多关于数据注释验证的示例和文章,但没有关于如何使用 API 验证表单的示例。
我希望能够在提交时执行以下操作:
- 检查字段值是否已存在于服务器上。
- 如果是,则为该字段引发错误,并显示消息(“此字段值已存在。”)。
- 否则,调用 service 来创建或更新值并重定向到成功页面。
Blazor WebAssembly 表单的 ModelState 对应项是什么?
c# - Blazor WebAssembly 忽略断点
我无法调试我的客户端 Blazor,断点不会被击中。
我还禁用了我之前使用的“使用 .NET Core SDK 的预览”(选项->环境->预览功能)。
视觉工作室 16.6.2。
blazor - Wasm DOM 访问和引用类型
我一直在密切关注 webassembly 的路线图,特别是调用 JS interop 的性能影响。作为这个引用类型提案的一部分,我们将能够在 Wasm 中对表进行基本操作。第 4 阶段已在6 月 23 日的会议上获得批准。Firefox 和 Chrome 正在致力于实施这个WebAssembly 路线图提案。铬实施。基于这个答案Wasm access dom。并引用铬描述
允许 WebAssembly 模块保存对 JS/DOM 对象的引用,将它们作为参数传递,将它们存储在局部变量和全局变量中,并将它们存储在 WebAssembly.Table 对象中。
这是否允许从 wasm 访问 DOM?还是需要进一步的实施?会提高/匹配访问 DOM 的 JS 性能吗?这是否允许在 wasm 中拥有一个虚拟 DOM,并且只在真实 DOM 中进行必要的更改?@安德烈亚斯罗斯伯格?
添加来自 Andreas Rossberg的回复 解释 GC 和 DOM-Access 的连接
然而,我们从 GC 提案中分离出来的关于引用类型的新提案试图对此给出更细致的回答。它引入了引用类型,但没有任何用于在 Wasm 本身内分配任何内容的功能。在主机引用被垃圾收集的嵌入中,仍然需要 Wasm 实现来理解 GC。但在其他嵌入中则不需要。
authorization - Blazor wasm 托管'无法从配置/TestApp.Client 加载设置-(AuthenticationService.js)
问题摘要
设置
Boilerplate Blazor 使用以下身份验证托管 wasm 应用程序:dotnet new blazorwasm -ho -au Individual -o TestApp
我将默认数据库更改为使用 MySql
我在我的开发机器上运行应用程序并测试我可以创建用户、登录等。在我的开发环境中一切正常。
部署站点加载后,但在主体顶部显示“正在授权”,并在浏览器底部抛出“发生未处理错误”消息以及浏览器控制台中的错误消息,如下所示
部署
服务器环境
Raspberry Pi4(8gb) 运行 Ubuntu Server 20.04 (64bit) 和 Apache2
部署方式
将更改推送到 Github 后,我在我的服务器上执行获取和拉取远程仓库
然后我确保项目构建并发布到/var/www/[MyWebAddress]/TestApp
使用:dotnet publish -o /var/www/[my web address]/TestApp --no-self-contained -r linux-x64
我直接从Microsoft docs复制了我的 apache 站点 conf 文件([我的网址].conf):
故障排除见解
在尝试此设置之前,我进行了相同的部署,但没有使用身份验证或数据库连接。我刚刚使用上述相同的方法部署了一个样板的 Blazorwasm 托管应用程序,并在服务器上对其进行了测试。一切正常,包括FetchData
和Counter
页面。这使我非常确定我的部署方法有效,并且与导致问题的 IdentityServer 有关。
为了测试这一点,我正在使用连接到手机提供的无线热点的笔记本电脑。这允许我从外部网络访问我的本地服务器(只需使用禁用 wifi 的手机即可,但我无法在移动设备上打开浏览器工具进行故障排除)。我从不同的浏览器得到的错误略有不同,但它们与 Firefox 产生的错误相似:
- 主布局已加载。我可以看到侧边栏和导航菜单。单击侧边栏链接会更改地址栏中的 url,但不会发生路由
- 导航菜单仅显示“关于”导航链接。(缺少“登录”和“注册”)
如果这是一个非常基本的错误的结果,我不会感到惊讶,但如果我有一些与我正在尝试做的事情不兼容的关键部分,我也不会感到惊讶。我只是在学习,所以请不要以为我已经完成了所有显而易见的事情。对我来说可能不是那么明显。
进步
从下面评论中Pavel Voronin提供的链接中,我找到了解决最初问题的解决方案:
在我的情况下,即使我启动了服务器项目,错误也出现了。我的身份服务器未安装在我的应用程序所在的同一台服务器上。
所以,我在 Program.cs(客户端)中做了一些更改
appsettings.json
我还使用权威和 ClientId配置 OpenId 设置。更改后,错误消失了。不确定这是否是解决此错误的方法。
对程序文件进行更改后,页面按预期加载,没有错误
但是当我点击“注册”链接时,在重定向回索引页面之前会出现一条简短的“不支持注册”消息
在多打探之后,我不相信这是一个解决方案,我正在回滚
从上面引用的示例中:
我的身份服务器未安装在我的应用程序所在的同一台服务器上。
这导致他使用OIDC
而不是ApiAuthentication
. 这不是我的情况,因为我的身份验证存在于 Blazor 服务器应用程序上,该应用程序是 Blazor“托管”模板的一部分,该模板基本上充当项目的 api
我在部署工作流程描述中没有包括的一件事是,在从 GitHub 拉取并在服务器存储库中构建项目之后,在发布之前,我迁移和更新了服务器上的数据库。我已验证数据库已创建并且所有 Auth 表都存在于服务器 db 上
我也有一个理论,它是使用服务器上的 IIS 设置启动的。我在开发中进行的测试使用的是 Kestrel。我使用 IIS 从 Visual Studio 启动,并得到一些与我从服务器看到的类似的错误。所以我从这两个文件中删除了所有 IIS 配置launchsettings.json
并重新发布。行为没有变化
我认为我已经缩小了范围
- 数据库连接和配置,包括连接字符串
- apache2 中的端口代理设置(除非我缺少压缩设置或类似的设置)
我很确定这与配置身份服务器有关。
asp.net-identity - 为用户设置 Blazor WASM API 安全性
我对 ASP.Net Core Identity 还很陌生,遇到了一些大脑障碍,很难找到答案
我有一个 Blazor WASM 站点,它有 2 个 API 来处理服务器上的各种事情。
我还启动并运行了一个 Identity Server 4 实例,其中还包括 ASP.NET Core Identity。每个 API 在 Identity Server 中都设置有自己的 Scope、API_A 和 API_B。在 Identity Server 中设置了一个客户端,用于直接与邮递员的 API 交互。我还在 Identity Server 中设置了一些具有各种角色声明的测试用户。
我的问题是,当 Blazor WASM 站点进行 API 调用时,是否将 User JWT 作为承载身份验证标头值附加,或者我是否需要将 Blazor WASM 站点设置为客户端并获取客户端令牌并将其附加为不记名身份验证标头值?
如果我需要发送用户令牌,如何将范围添加到该令牌以确保它有权调用该 API?
如果我需要将 Blazor WASM 站点设置为客户端,我如何向用户提供带有客户端令牌的声明信息,以便 API 知道哪个用户正在调用 API,以及他们属于哪个角色?
async-await - Blazor 客户端刷新组件
我试图弄清楚单击按钮后如何刷新客户端组件。
带有示例的回购链接:https ://github.com/ovie91/RefreshComponent
站点 /test 或从导航菜单测试
所以我有从 API 检索数据的 OnInitializedAsync 方法
然后我有一个连接到按钮的方法
我曾尝试使用this.StateHasChanged(); 但没有反应。作为一种解决方法,我可以强制您再次导航到同一个网站,但是这个刷新“整个”网站而不是一个组件。
关于如何处理它的任何想法?
整个代码(剥离到最低限度):
更新 我想刷新组件,因此 OnInitializedAsync 将再次被触发,这意味着我不必在单击按钮后再次运行相同的代码。希望你明白我的意思。
c# - 如何在 Blazor WebAssembly 中获取静态图像文件的文件路径列表?
我正在尝试获取 Blazor WebAssembly 项目中 wwwroot 文件夹中的静态文件列表。这是我迄今为止尝试过的:
我收到此错误:
System.IO.DirectoryNotFoundException:找不到路径“/wwwroot\images”的一部分。
我究竟做错了什么?谢谢你。