在ASP.NET Core中检测SSE的断开连接

7

我希望能够在ASP.NET Core中检测SSE(服务器发送事件)的断开连接。旧方式Response.IsClientConnected已经无法使用。您有解决此问题的方法吗?

2个回答

9
我找到了一个临时解决方案来回答我的问题。这个解决方案是临时的,因为当尝试发送请求并失败时,会检测到IsCancellationRequested,而不是在用户断开连接之前发送请求。
if (HttpContext.RequestAborted.IsCancellationRequested == true)
{
     break;
} 

谢谢!如果您找到了“正确”的方式,请评论一下。 - mcintyre321

3
.NET Core 2.0:

该方法创建一个端点,并在60秒后返回null。如果在这60秒内请求被取消,方法会立即返回null

[HttpGet]
public async Task<string> Get()
{
    Request.HttpContext.RequestAborted.WaitHandle.WaitOne(60000);
    return null;
}

这种方法在请求连接期间执行多个工作单元,直到工作完成为止。
[HttpGet]
public async Task<Items[]> Get()
{
    Item item = null;
    List<Items> items = new List<Items>();
    do
    {
        item = DoRepitiousWork();
        Items.Add(item);
    }
    while (!Request.HttpContext.RequestAborted.IsCancellationRequested && !item.IsLast);
    return items.ToArray();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接