javascript - SignalR 错误无法将类型 'System.Threading.Tasks.Task<object>' 隐式转换为 'string'

标签 javascript c# signalr

我正在尝试从我的 c# 集线器类中调用一个方法,但是当我尝试从 javascript 代码返回一个字符串时,我得到一个 System.Threading.Tasks.Task 而不是一个字符串。我想知道如何编辑 javascript 方法以返回实际字符​​串。

这是中心类:

public String getMessage(int id)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
        var s = hubContext.Clients.All.getMessage(id);


        return s;

    }

JavaScript:

chat.client.getMessage = function (id) {
                for (i = 0; i < messageArr.length; i++) {
                    if (messageArr[i].ID == id) {
                        var s = messageArr[i].ID + messageArr[i].Name + messageArr[i].Content;
                        window.alert(s);
                        return s;
                    }
                }
            }

最佳答案

SignalR 不支持从客户端到集线器的返回值。 Clients.All 返回的任务将在调用所有客户端后完成。

如果您想要从客户端返回值,则必须使用正确的值手动调用集线器,并使用您自己的消息 ID 匹配调用者。

参见 documentation

You can't get a return value from a client method; syntax such as int x = Clients.All.add(1,1) does not work.

关于javascript - SignalR 错误无法将类型 'System.Threading.Tasks.Task<object>' 隐式转换为 'string',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38338065/

相关文章:

javascript - 将 selectInput 传递给 html 标签

javascript - 检测 img src 更改

javascript - 如何使用javascript获取浏览器显示高度和宽度

javascript - 如何从表中获取具有确切 ID 的产品?

c# - C# 中是否有类似 VB.NET 的运算符?

jquery - 如何从 SignalR 调用多个集线器方法

c# - 将嵌套的 JSON 数据解析为 DataTable

c# - LINQ:如何向 LINQ 查询添加多个变量?

asp.net - 使用 SignalR 在多个 Web 应用程序之间进行通信

c# - 当用户连接到集线器类时,公共(public)任务 Connect() 不会触发