SignalR服务器抛出“;不正确的内容类型”;

本文关键字:类型 不正确 SignalR 服务器 | 更新日期: 2023-09-27 18:28:13

在转到必要的应用程序(Android)之前,我正试图创建一个以控制台应用程序为客户端的SignalR示例,但我遇到了一个小问题。我的服务器是ASP.NET 5(DNX Core 5.0),服务器库是SignalR.server 3.0.0-rc1-final.

到目前为止,这是我的客户端代码:

private static void Main(string[] args)
{
    var connection = new HubConnection("http://127.0.0.1:5000/");
    var myHub = connection.CreateHubProxy("TestHub");
    connection.Start().ContinueWith(task => {
        if (task.IsFaulted)
        {
            Console.WriteLine(task.Exception.GetBaseException());
        }
        else {
            Console.WriteLine("Connected");
        }
    }).Wait();
    myHub.Invoke<string>("Send", "Hello World!").ContinueWith(task => {
        if (task.IsFaulted)
        {
            Console.WriteLine(task.Exception.GetBaseException());
        }
        else {
            Console.WriteLine(task.Result);
        }
    });
}

connection.Start()方法有效,但当尝试调用Send()时,我得到以下错误:

System.InvalidOperationException:不正确的内容类型:位于Microsoft.AspNet.Http.Features.Internal.FormFeature.d_12.MoveNext()…

我的第一个想法是尝试将Content-Type标头添加到连接中:

connection.Headers.Add("Content-Type", "application/json");

但在下一次连接/调用尝试时会出现以下错误:

标头名称被滥用。确保请求标头与一起使用HttpRequestMessage、具有HttpResponseMessage的响应标头,以及具有HttpContent对象的内容标头。

此外,在服务器日志中,我看到它已经是application/json,所以我对这个异常有点困惑。

这是我的服务器上的集线器,但它并不是真正相关的,因为它没有到达Send方法。

[HubName("TestHub")]
public class TestHub : Hub
{
    public string Send(string message)
    {
        return message;
    }
}

我做错什么了吗?如果有任何帮助/想法,我将不胜感激,谢谢。

SignalR服务器抛出“;不正确的内容类型”;

我不确定您可能使用的AspNet.SignalR.Client 2.2是否与Server 3.0完全兼容。然而,对于4.5.1,在将websocket支持添加到web服务器(Kestrel)之后,我就可以工作了

在project.json:

Microsoft.AspNet.WebSockets.Server":  "1.0.0-rc1-final",

在Startup.cs:

app.UseWebSockets();

您还可以使用仍处于早期开发阶段的本机cpp客户端。https://github.com/aspnet/SignalR-Client-Cpp(目前似乎只支持websocket)。