使用新的 Service 实现,我是否必须为我的所有服务提供一个 Options 方法?
使用我的所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-Control-Allow-Origin 标头。
这是一个例子:
https://github.com/JonCanning/SSCors
HelloService 使用服务
GoodbyeService 使用 ServiceBase
使用新的 Service 实现,我是否必须为我的所有服务提供一个 Options 方法?
使用我的所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-Control-Allow-Origin 标头。
这是一个例子:
https://github.com/JonCanning/SSCors
HelloService 使用服务
GoodbyeService 使用 ServiceBase
因为 ServiceStack 的旧 API 强制执行基于接口的 API,它只支持 GET、POST、PUT、DELETE、PATCH 请求。处理 OPTION 请求,我们本质上是一个权宜之计,只有一个实现来发出配置的标头并关闭响应。
使用ServiceStack 的新 API,不再有任何限制,因为您现在只需在 IService 上使用其名称即可处理任何 HTTP 动词。现在,这使您可以单独处理特定请求的所有动词。但现在它不再为您隐式处理,需要一个实现来通过服务处理它。
您可以继续处理所有 OPTIONS 请求,方法是使用任何预定义的钩子在它到达服务之前对其进行一般处理。
例如
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();
});