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.IHttpRequestServiceStack.ServiceHost.IHttpResponse,但这些接口似乎没有分别声明 .Method().EndServiceStackRequest() 方法。我正在使用using ServiceStack.ServiceHost; 我错过了什么? @AndrewCr 使用httpReq.HttpMethod 代替httpReq.MethodhttpRes.EndRequest() 代替httpRes.EndServiceStackRequest()

以上是关于ServiceStack CORS 功能的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?

ServiceStack:通过 WebSocket 选择服务器发送的事件

为啥在 ASP.NET 5 上更新到 beta8 后 Cors 不起作用?

使用 Servicestack.Text 进行 XML 反序列化

保存Ajax但不将CORS cookie从127.0.0.1发送到服务

您可以通过命名管道自托管 ServiceStack 吗?