支持CORS的服务器发送事件
本文关键字:事件 服务器 CORS 支持 | 更新日期: 2023-09-27 18:29:10
我在ServiceStack中使用服务器发送的事件,我需要允许它跨源使用。
我已经在我的应用程序中设置了ServiceStack CorsFeature
,但ServerEventsFeature
没有遵守这一点。
我可以在OnCreated
中手动添加Access-Control-Allow-Origin
标头,这允许向event-stream
请求,但向心跳的请求失败,因为我无法在此请求上设置标头。
Plugins.Add(new ServerEventsFeature {
HeartbeatInterval = new TimeSpan(0,0,30),
OnCreated = (subscription, request) => {
request.Response.AddHeader("Access-Control-Allow-Origin","*");
}
...
}
由于SSE功能是在RawHandler上实现的,所以我看不出如何将这个头放入请求中。有没有一种方法可以为所有/event-
url设置标题?
谢谢。
只有/event-stream
和/event-heartbeat
是原始HTTP处理程序,其他event-*
路由是通过ServiceStack的请求管道的普通ServiceStack服务。
我添加了一个更改,以便在此提交中自动将Config.GlobalResponseHeaders
应用于/event-stream
和/event-heartbeat
处理程序。当启用CorsFeature时,此更改现在应该会自动添加CORS标头。
我还为/event-heartbeat
回调添加了OnHeartbeatInit
,以匹配/event-stream
OnInit
回调,因此您也可以向心跳处理程序添加自定义标头。
Plugins.Add(new ServerEventsFeature {
HeartbeatInterval = new TimeSpan(0,0,30),
OnInit = (request) => {
request.Response.AddHeader(...);
},
OnHeartbeatInit = (request) => {
request.Response.AddHeader(...);
},
...
}
此更改可从v4.0.34+版本获得,该版本现在可在MyGet上获得。