You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@microsoft/signalr 8.0.7长轮询Content-Type能否配置为application/json?

@microsoft/signalr 8.0.7长轮询请求Content-Type问题解答

问题背景

在@microsoft/signalr 8.0.7版本中,长轮询(longpolling)请求的Content-Type被设置为text/plain,但请求负载(payload)实际为JSON格式:

握手请求截图

长轮询请求截图

问题解答

1. 是否应设置为application/json?

并非必须。@microsoft/signalr框架默认将长轮询请求的Content-Type设为text/plain是有意的设计:SignalR的通信协议并非严格遵循标准JSON规范,部分场景下会传输多帧数据或特殊格式内容,text/plain能更好地兼容这类非标准传输需求,避免因严格的JSON格式校验导致通信异常。

2. 若需配置为application/json的方法

如果业务场景确实需要修改Content-Type为application/json,可以通过自定义HttpClient拦截请求来实现,具体步骤如下:

  • 继承SignalR的DefaultHttpClient,重写send方法,针对长轮询的POST请求修改请求头
  • 在构建HubConnection时传入自定义的HttpClient

示例代码:

import { HubConnectionBuilder, DefaultHttpClient } from "@microsoft/signalr";

class CustomHttpClient extends DefaultHttpClient {
  async send(request) {
    // 匹配长轮询的POST请求,修改Content-Type
    if (request.method === "POST" && request.url.includes("/longPolling")) {
      request.headers.set("Content-Type", "application/json");
    }
    return super.send(request);
  }
}

// 构建Hub连接并使用自定义HttpClient
const hubConnection = new HubConnectionBuilder()
  .withUrl("/your-hub-endpoint", {
    httpClient: new CustomHttpClient()
  })
  .build();

注意:修改Content-Type后,需确保服务端能正确解析application/json格式的请求。若服务端是ASP.NET Core SignalR,默认已支持该格式;若为自定义服务端,则需适配对应的解析逻辑。

内容的提问来源于stack exchange,提问作者Markus Benz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:52:42