Append Cookie - SignalR Core



内部Hub当我尝试添加cookie时,我得到这个错误:"响应头不能修改,因为响应已经开始">

下面是在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不支持。

所以在signalr hub中设置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.cs我说:

app.UseMiddleware<SignalRCookieIdMiddleware>();

最新更新