ASP.NET核心 2.1 SignalR 未定义

ASP.NET Core 2.1 SignalR is not defined

这是我的聊天记录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.

但是,这个错误并没有消失,我由于某种原因无法继续。

我看到您的应用程序是 ASP.NET Core 但您使用的 jquery.signalR.js 实际上是 ASP.NET MVC SignalR ASP.NET Core 的客户端是 signalr.js,它独立于 jQuery。您可以从 NPM:

下载 ASP.NET Coresignalr.js

您也可以使用 Visual Studio 客户端 库管理器 (LibMan) 下载,如下所示:

  • Solution Explorer中,右击项目,select Add > 客户端库。

  • 添加客户端库 对话框中,对于 Provider select unpkg.

  • 对于库,输入@microsoft/signalr@latest,select最新版本
    那不是预览。

  • 必须将 目标位置 更改为 wwwroot/lib/signalr 如果路径中包含 @。不然下载不了

更多详情:Getting started with ASP.NET Core SignalR

对于我的情况,我忘记了 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。

您使用了错误的 signalr javascript 库。试试 https://www.npmjs.com/package/@aspnet/signalr,这对我有用。

我遇到了同样的问题,并找到了这样的解决方案。您可能需要将 SignalR 添加到您的页面。如果您使用的是主布局,您可以在此处添加它。