翼度科技»论坛 编程开发 .net 查看内容

【ASP.NET Core】修改Blazor.Server的Hub地址后引发的问题

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
Blazor Server,即运行在服务器上的 Blazor 应用程序,它的优点是应用程序在首次运行时,客户端不需要下载运行时。但它的代码是在服务器上执行的,然后通过 SignalR 通信来更新客户端的 UI,所以它要求必须建立 Web Socket 连接。
用于 Blazor 应用的 SignalR Hub 是 ComponentHub,默认的连接地址是 /_blazor。多数时候我们不需要修改它,但人是一种喜欢折腾的动物,既然 MapBlazorHub 方法的重载也允许我们修改地址,那咱们何不试试。
  1. app.MapBlazorHub("/myapp");app.MapFallbackToPage("/_Host");
复制代码
我把 ComponentHub 的通信地址改为 /myapp。这时候,客户端上就不能使用 blazor.server.js 中的默认行为了,咱们必须手动启动 Blazor 应用了(因为自动启动用的是默认的 /_blazor 地址)。
  1. [/code]在引用 blazor.server.js 文件时,加上一个 autostart = "false",表示 blazor 应用手动启动。哦,这个 autostart 是怎么来的?来,咱们看看源代码。在 BootCommon.ts 文件中,定义有一个名为 shouldAutoStart 的函数,而且它已导出。看名字就知道,它用来判断是否自动启动 Blazor 应用。
  2. [code]export function shouldAutoStart(): boolean {  return !!(document &&    document.currentScript &&    document.currentScript.getAttribute('autostart') !== 'false');}
复制代码
现在,你明白这个 autostart 特性是怎么回事了吧。
在调用 Blazor.start 方法时咱们要设定一个配置项—— configureSignalR。它指定一个函数,函数的参数是 HubConnectionBuilder 对象。这是 signalR.js 中的类型。再调用 withUrl 方法更改连接地址,默认的代码是这样的。
  1. const connectionBuilder = new HubConnectionBuilder()  .withUrl('_blazor')  .withHubProtocol(hubProtocol);
复制代码
很遗憾的是,运行后发现并不成功。

 
其实咱们的代码并没有错,问题其实是出在 Blazor 自身的“八阿哥”上。别急,老周接下来一层层剥出这个问题,你会感叹,官方团队竟然会犯“高级错误”。

咱们先来解释这个奇葩的错误信息,什么JSON格式不对?什么无效的字符“

举报 回复 使用道具