如何通过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
相关产品推荐
相关产品推荐

