ASP.NET Core 2.1中的SignalR未定义。

10

这是我的聊天 JavaScript 代码

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

connection.on("ReceiveMessage", function (message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("Messages").appendChild(li);
});

connection.start().catch(function (err) {
    return console.error(err.toString());
});

document.getElementById("Send").addEventListener("click", function (event) {
    var message = document.getElementById("Message").value;
    connection.invoke("SendMessage", message).catch(function (err) {
        return console.error(err.toString());
    });
    event.preventDefault();
});

当我运行带有聊天输入的页面时,我收到以下错误:

Uncaught ReferenceError: signalR is not defined at chat.js:3

chat.js中第3行是:

var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

我从 Visual Studio 添加客户端库中下载了 SignalR 客户端库。现在我拥有一个名为 jquery.signalR.js 的文件,它是 ASP.NET SignalR Javascript Library 2.4.0.

但是,这个错误并没有消失,出于某些原因我无法继续进行。

3个回答

20

我看到你的应用程序是ASP.NET Core,但你正在使用实际上是为ASP.NET MVC准备的jquery.signalR.jsASP.NET CoreSignalR客户端是独立于jQuerysignalr.js。您可以从NPM下载ASP.NET Coresignalr.js:

您还可以使用Visual Studio客户端侧边栏库管理器(LibMan)进行下载,步骤如下:

  • 解决方案资源管理器中,右键单击项目,然后选择添加 > 客户端侧边栏库

  • 添加客户端侧边栏库对话框中,选择unpkg作为提供商。

  • 对于库,请输入@microsoft/signalr@latest,并选择不是预览版的最新版本。

  • 如果目标位置在路径中包含@,则必须将其更改为wwwroot/lib/signalr,否则它将无法下载。

输入图像描述

更多详情请参见:ASP.NET Core SignalR 入门


你好,有没有不使用npm的方法?我必须在我的机器上安装node js吗? - JianYA
<script src="~/Scripts/lib/signalr.js"></script> <script> const connection = new signalR.HubConnectionBuilder() .withUrl("http://localhost:56889/expeniSignalRServer") .build(); connection.start().then(function () { console.log("connected"); }); </script>这是我在页面中的引用方式,但仍然出现了“Uncaught ReferenceError: signalR未定义”的错误。 - Sameer Kamran
1
请注意,此软件包已从 @aspnet 移动到 @microsoft。详情请参见 此处。+1 - MarredCheese
这个有效,谢谢。 - SmallWorld

1

对于我的情况,我忘记了sjgnalr.js和chat.js文件的顺序。

  <script src="~/lib/signalr/dist/browser/signalr.js"></script>
    <script src="~/js/chat.js"></script>

我的错误如下:

  <script src="~/js/chat.js"></script>
      <script src="~/lib/signalr/dist/browser/signalr.js"></script>

因为我不在意js文件的顺序,所以SignalR未定义是很常见的。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接