ServiceStack CORS 功能
Posted
技术标签:
【中文标题】ServiceStack CORS 功能【英文标题】:ServiceStack CORS Feature 【发布时间】:2012-11-24 08:25:33 【问题描述】:使用新的 Service 实现,我是否必须为我的所有服务提供 Options 方法?
使用我所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-Control-Allow-Origin 标头。
这是一个例子:
https://github.com/JonCanning/SSCors
HelloService 使用服务
GoodbyeService 使用 ServiceBase
【问题讨论】:
示例链接不再有效。 【参考方案1】:因为 ServiceStack 的旧 API 强制执行基于接口的 API,它只支持 GET、POST、PUT、DELETE、PATCH 请求。处理 OPTION 请求,我们本质上是一种权宜之计,只有一个实现来发出配置的标头并关闭响应。
使用ServiceStack's New API 不再有任何限制,因为您现在只需在 IService 上使用其名称即可处理任何 HTTP 动词。现在,这使您可以单独处理特定请求的所有动词。但现在它不再为您隐式处理,需要一个实现来通过服务处理它。
您可以继续处理所有 OPTIONS 请求,方法是使用任何pre-defined hooks 在到达服务之前对其进行一般处理。
例如
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();
);
【讨论】:
(请原谅我的无知,我是 ServiceStack 的新手。)此代码 sn-p 出现在此处和 ***.com/questions/8211930/… 中,但我似乎无法编译它。RequestFilters.Add(...)
方法需要 ServiceStack.ServiceHost.IHttpRequest
和 ServiceStack.ServiceHost.IHttpResponse
,但这些接口似乎没有分别声明 .Method()
或 .EndServiceStackRequest()
方法。我正在使用using ServiceStack.ServiceHost;
我错过了什么?
@AndrewCr 使用httpReq.HttpMethod
代替httpReq.Method
和httpRes.EndRequest()
代替httpRes.EndServiceStackRequest()
以上是关于ServiceStack CORS 功能的主要内容,如果未能解决你的问题,请参考以下文章
如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?
ServiceStack:通过 WebSocket 选择服务器发送的事件
为啥在 ASP.NET 5 上更新到 beta8 后 Cors 不起作用?
使用 Servicestack.Text 进行 XML 反序列化