You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Javascript客户端调用带Enum枚举参数的SignalR Hub方法

解决方法

SignalR服务端默认对枚举类型参数采用整数值反序列化规则,不需要修改任何服务端代码,你只需要在JS侧定义和服务端枚举顺序、数值完全匹配的枚举常量即可正常调用。

步骤1:JS侧定义匹配的枚举

// 严格对应服务端枚举的数值,C#枚举默认从0开始按定义顺序递增
const CityEnum = {
  LONDON: 0,
  LISBON: 1,
  RIO: 2,
  SYDNEY: 3
}

const FruitEnum = {
  APPLES: 0,
  BANANAS: 1,
  ORANGES: 2
}

如果你的服务端给枚举显式指定了自定义数值(比如LONDON = 100),只需要把JS侧对应的数值改成和服务端一致即可。

步骤2:调用SignalR方法

// 此处省略connection初始化、连接建立的前置代码
const userName = "mindi-mink";
const city = CityEnum.LONDON;
const fruit = FruitEnum.APPLES;

// 直接调用invoke方法传参即可,和C#客户端调用逻辑一致
await connection.invoke("MyHubMethod", userName, city, fruit);

特殊场景说明

如果你服务端的Json序列化配置了全局的JsonStringEnumConverter,枚举会被序列化为字符串传输,此时你不需要定义数值枚举,直接传对应枚举名称的字符串即可:

await connection.invoke("MyHubMethod", "mindi-mink", "LONDON", "APPLES");

内容的提问来源于stack exchange,提问作者joedotnot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:02