我正在构建一个使用blazor服务器端渲染的web应用程序。我也想使用不同的信号连接的每个子路径的网站。例如:
_product_detail_blazor_product_category_blazor我认为在服务器代码上,我们可以设置路径:
app.UseEndpoints(endpoints =>
...
endpoints.MapBlazorHub("/_product_detail_blazor");
...
});但我不知道如何让客户端连接到这条路径:
/_product_detail_blazor?id=wNzkjIsL123Obe43rvK810g默认情况下,它连接到:
/_blazor?id=wNzkjIsL123Obe43rvK810g谢谢
发布于 2022-08-11 17:44:45
通过使用几个黑客,我成功地避免了添加<base href>,但到目前为止,一切都正常。
首先,在我的_Layout.cshtml中(因为我已经向现有的MVC应用程序.NET6添加了blazor组件),我需要阻止Blazor自动启动,我需要告诉signalR在哪里可以查看:
<script src="~/_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
configureSignalR: function (builder) {
builder.withUrl("/_blazor", {
});
}
});
</script>然后,由于/_blazor/initializers路径是用Blazor硬编码的,而且没有基本标记,如果您从根页面导航,它将找不到它,所以我需要在我的program.cs中进行一次脏重写:
var rewriteOptions = new RewriteOptions();
rewriteOptions.AddRewrite("_blazor/initializers", "/_blazor/initializers", skipRemainingRules: true);
app.UseRewriter(rewriteOptions);到目前为止似乎还不错。Blazor似乎是一个排他性的前端,而不是您应该集成到现有MVC项目中的东西,因为Blazor需要的一些配置可能而且确实会影响MVC作为一个整体的操作,例如,基标记是“强制的”。
发布于 2021-11-20 08:28:14
Blazor假设一切都在基本路径上运行。可以使用<base href="..." />设置基本路径。例如,在/spa下托管Blazor
endpoints.MapBlazorHub("/spa/_blazor");<base href="/spa/" />我不知道有一个(受支持的)方法来将基路径从blazor集线器的URL中分离出来,您可能是在逆流运行。
先前的错误答案:
你可以选择退出自动启动。我在用.NET 6做同样的事情,但是有一个警告,到blazor/_initializers的路径是硬编码,不能更改。。因此,您需要两个注册,一个用于托管websocket,另一个用于初始化程序:
app.UseEndpoints(endpoints =>
...
endpoints.MapBlazorHub("/_product_detail_blazor");
endpoints.MapBlazorHub();
...
});若要选择退出自动启动并指定自定义端点,请执行以下操作:
<script src="/_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
configureSignalR: builder => {
builder.withUrl("_product_detail_blazor");
}
});
</script>我已经报道过这个问题,与ASP.NET核心团队。
https://stackoverflow.com/questions/65017310
复制相似问题