附加 Cookie - SignalR 核心

Append Cookie - SignalR Core

Hub 中,当我尝试添加 cookie 时出现此错误:“无法修改响应 headers,因为响应有已经开始了.

以下是在 Hub 中添加 cookie 的示例代码:

if (!Context.GetHttpContext().Request.Cookies.ContainsKey("_a_cookie")) {
    Context.GetHttpContext().Response.Cookies.Append("_a_cookie", "1");
}

有什么让它发挥作用的想法吗?

SignalR基于WebSockets,我们知道websocket不同于http,但是http支持cookie,websocket目前还不支持。

所以在信号集线器中设置 cookie 的唯一机会是在连接连接时,因为该连接请求基于 http。

最终,我最终实现了自己的中间件,在客户端尝试连接时像这样添加 cookie:

public class SignalRCookieIdMiddleware
{
    private readonly RequestDelegate _next;

    public SignalRCookieIdMiddleware(RequestDelegate next) {
        _next = next;
    }

    public async Task InvokeAsync(Microsoft.AspNetCore.Http.HttpContext context) {
        if(context.Request.Path == "/{HUB_NAME}/negotiate") {
            if (!context.Request.Cookies.ContainsKey("_a_cookie")) {
                context.Response.Cookies.Append("_a_cookie", 1);
            }
        }
        // Call the next delegate/middleware in the pipeline
        await _next(context);
    }
}

然后在 Startup.csConfigure 里面我添加了:

app.UseMiddleware<SignalRCookieIdMiddleware>();