首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将blazor服务器端的signalr入口点从_blazor更改为_new_blazor

如何将blazor服务器端的signalr入口点从_blazor更改为_new_blazor
EN

Stack Overflow用户
提问于 2020-11-26 06:55:36
回答 2查看 534关注 0票数 1

我正在构建一个使用blazor服务器端渲染的web应用程序。我也想使用不同的信号连接的每个子路径的网站。例如:

我认为在服务器代码上,我们可以设置路径:

代码语言:javascript
复制
app.UseEndpoints(endpoints =>
    ...
    endpoints.MapBlazorHub("/_product_detail_blazor");
    ...
});

但我不知道如何让客户端连接到这条路径:

代码语言:javascript
复制
/_product_detail_blazor?id=wNzkjIsL123Obe43rvK810g

默认情况下,它连接到:

代码语言:javascript
复制
/_blazor?id=wNzkjIsL123Obe43rvK810g

谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-08-11 17:44:45

通过使用几个黑客,我成功地避免了添加<base href>,但到目前为止,一切都正常。

首先,在我的_Layout.cshtml中(因为我已经向现有的MVC应用程序.NET6添加了blazor组件),我需要阻止Blazor自动启动,我需要告诉signalR在哪里可以查看:

代码语言:javascript
复制
<script src="~/_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
        configureSignalR: function (builder) {
            builder.withUrl("/_blazor", {
                
            });
        }
    });
</script>

然后,由于/_blazor/initializers路径是用Blazor硬编码的,而且没有基本标记,如果您从根页面导航,它将找不到它,所以我需要在我的program.cs中进行一次脏重写:

代码语言:javascript
复制
var rewriteOptions = new RewriteOptions();
    rewriteOptions.AddRewrite("_blazor/initializers", "/_blazor/initializers", skipRemainingRules: true);
    app.UseRewriter(rewriteOptions);

到目前为止似乎还不错。Blazor似乎是一个排他性的前端,而不是您应该集成到现有MVC项目中的东西,因为Blazor需要的一些配置可能而且确实会影响MVC作为一个整体的操作,例如,基标记是“强制的”。

票数 1
EN

Stack Overflow用户

发布于 2021-11-20 08:28:14

Blazor假设一切都在基本路径上运行。可以使用<base href="..." />设置基本路径。例如,在/spa下托管Blazor

代码语言:javascript
复制
endpoints.MapBlazorHub("/spa/_blazor");
代码语言:javascript
复制
<base href="/spa/" />

我不知道有一个(受支持的)方法来将基路径从blazor集线器的URL中分离出来,您可能是在逆流运行。

先前的错误答案:

你可以选择退出自动启动。我在用.NET 6做同样的事情,但是有一个警告,到blazor/_initializers的路径是硬编码,不能更改。。因此,您需要两个注册,一个用于托管websocket,另一个用于初始化程序:

代码语言:javascript
复制
app.UseEndpoints(endpoints =>
    ...
    endpoints.MapBlazorHub("/_product_detail_blazor");
    endpoints.MapBlazorHub();
    ...
});

若要选择退出自动启动并指定自定义端点,请执行以下操作:

代码语言:javascript
复制
<script src="/_framework/blazor.server.js" autostart="false"></script>
<script>
    Blazor.start({
        configureSignalR: builder => {
            builder.withUrl("_product_detail_blazor");
        }
    });
</script>

我已经报道过这个问题,与ASP.NET核心团队

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65017310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档