ServiceStack CORS功能

时间:2012-12-06 10:17:14

标签: servicestack cors

使用新的Service实现,我是否必须为我的所有服务提供Options方法?

使用我的所有服务当前使用的旧ServiceBase方法,OPTIONS在没有Access-Control-Allow-Origin标头的情况下返回OK。

以下是一个例子:

https://github.com/JonCanning/SSCors

HelloService使用服务

GoodbyeService使用ServiceBase

1 个答案:

答案 0 :(得分:8)

由于ServiceStack的旧API强制执行基于接口的API,因此它仅支持GET,POST,PUT,DELETE,PATCH请求。处理OPTION请求我们本质上是一个止损工作,只有一个实现只发出配置的头并关闭响应。

使用ServiceStack's New API不再有任何限制,因为您现在可以通过在IService上使用其名称来处理任何HTTP Verb。现在,您可以单独处理特定请求的所有动词。但现在它不再为您隐式处理,需要一个实现来通过服务来处理它。

您可以继续使用pre-defined hooks中的任何一个来处理所有OPTIONS请求,以便在它到达服务之前对其进行一般处理。

E.g。

Plugins.Add(new CorsFeature()); //Registers global CORS Headers

this.RequestFilters.Add((httpReq, httpRes, requestDto) => {
   //Handles Request and closes Responses after emitting global HTTP Headers
    if (httpReq.HttpMethod == "OPTIONS") 
        httpRes.EndRequest();
});