如何在区域内使用Razor组件库来使用Blazor服务器端?

10

我有一个现有的 .net core 3.0 预览版 7 的Web应用程序,我的应用程序主要是 razor-pages 组织成区域,例如:管理、销售等。如果我将 blazor 组件放在应用程序的根目录下,我就能成功地使用它。但是,如果我将该组件移动到 RCL 中,我可以访问该组件,但它不响应(例如,点击计数器示例的按钮不会使计数器增加)。

我想能够访问 localhost/Admin/RazorPageContainingBlazorComponentlocalhost/Sales/AnotherRazorPageContainingBlazorComponent

我在 Chrome 开发工具中看到这个错误: ''' Error: Failed to complete negotiation with the server: Error

https://localhost:5000/myfeature/_blazor/negotiate 404 '''

我认为这是由于 signalR hub 被映射到 https://localhost:5000/ 导致的,但我不确定如何添加额外的 blazor hub 映射或如何更改 blazor.server.js 以使用根 hub。


如果您能提供一个 [mcve] 就太棒了。 - jazb
2个回答

7

经过查找SignalR文档和blazor.server.js文件,我成功找到了解决方案。将以下代码添加到您的布局文件中,可以配置SignalR Hub使用绝对路径而不是相对路径。

<script src="~/_framework/blazor.server.js" autostart="false"></script>
<script>
    Blazor.start({
        configureSignalR: function (builder) {
            builder.withUrl("/_blazor");
        }
    });
</script>

这使得 Razor 组件可以直接在 Razor 类库中使用,使用区域路由。


谢谢您。请注意,这会破坏模板App.razor附带的路由。如果您不想从Blazor应用程序进行路由,可以直接将视图和模板代码放入App.razor中。 - Chris Jensen
谢谢点赞...不过我还在寻找一个非hack的解决方案... - misanthrop
我不认为这是黑客攻击。这只是一个记录在案的配置。 - ACertainDeveloper
感谢您的回来。好的,但我使用普通的asp.net core 3.1 MVC设置。我不明白为什么在我的情况下需要这个额外的配置... - misanthrop

6

嘿,我们也遇到了同样的问题。更好的解决方案是在html头部指定<base href="~/"/>,然后只需引用<script src="_framework/blazor.server.js"/>

因此,

<html>
<head>
<base href="~/"/>
</head>
<body>

<script src="_framework/blazor.server.js"/>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接