具有CORS支持的服务器发送事件

时间:2014-11-04 17:18:29

标签: c# servicestack cors server-sent-events

我正在使用Server Sent Events in ServiceStack,我需要允许它在原点上使用。

我已在我的应用程序中设置了ServiceStack CorsFeature,但ServerEventsFeature并不尊重这一点。

我可以在Access-Control-Allow-Origin中手动添加OnCreated标头,并允许event-stream的请求,但是对心跳的请求失败,因为我无法在此请求上设置标头。

Plugins.Add(new ServerEventsFeature {
    HeartbeatInterval = new TimeSpan(0,0,30),
    OnCreated = (subscription, request) => {
        request.Response.AddHeader("Access-Control-Allow-Origin","*");
    }
    ...
}

作为SSE功能is implemented on a RawHandler,我无法看到如何将此标头添加到请求中。有没有办法为所有/event-网址设置标题?

感谢。

1 个答案:

答案 0 :(得分:1)

只有/event-stream/event-heartbeat是原始HTTP处理程序,其他event-*路由是通过ServiceStack的请求管道的正常ServiceStack服务。

我已添加更改以自动将Config.GlobalResponseHeaders应用于/event-stream/event-heartbeat处理程序in this commit。此更改现在应自动添加CORS Headers when CorsFeature is enabled

我还为OnHeartbeatInit回调添加了/event-heartbeat以匹配/event-stream OnInit回调,因此您也可以向Heartbeat处理程序添加自定义标头。< / p>

Plugins.Add(new ServerEventsFeature {
    HeartbeatInterval = new TimeSpan(0,0,30),
    OnInit = (request) => {
        request.Response.AddHeader(...);
    },
    OnHeartbeatInit = (request) => {
        request.Response.AddHeader(...);
    },
    ...
}

此修改可从 v4.0.34 + 获得,现在为available on MyGet