使用新的Service实现,我是否必须为我的所有服务提供Options方法?
使用我的所有服务当前使用的旧ServiceBase方法,OPTIONS在没有Access-Control-Allow-Origin标头的情况下返回OK。
以下是一个例子:
https://github.com/JonCanning/SSCors
HelloService使用服务
GoodbyeService使用ServiceBase
答案 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();
});