2012-12-06 43 views
4

使用新的服務實現,我必須爲我的所有服務提供一個選項方法嗎?ServiceStack CORS功能

使用我的所有服務當前使用的舊ServiceBase方法,OPTIONS在沒有Access-Control-Allow-Origin標頭的情況下返回OK。

下面是一個例子:

https://github.com/JonCanning/SSCors

HelloService的使用服務

GoodbyeService使用ServiceBase

+2

示例鏈接不再有效。 – skolima

回答

8

因爲ServiceStack舊API執行基於接口的API它僅支持GET,POST,PUT, DELETE,PATCH請求。處理OPTION請求我們基本上是一個立足點的解決方法,它只有一個實現來發布已配置的頭文件並關閉響應。

使用ServiceStack's New API不再有任何限制,因爲您現在可以通過在您的IService上使用其名稱來處理任何HTTP動詞。現在,您可以單獨處理所有動詞以處理特定請求。但現在它不再爲您隱式處理,而需要一個實現來通過服務來處理它。

您可以繼續處理所有的OPTIONS請求,使用pre-defined hooks中的任何一項在到達服務前對其進行一般處理。

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(); 
}); 
+1

(請原諒我的無知,我是ServiceStack的新手。) 此代碼片段出現在http://stackoverflow.com/questions/8211930/servicestack-rest-api-and-cors中,但我可以'似乎得到它編譯。 'RequestFilters.Add(...)'方法需要一個'ServiceStack.ServiceHost.IHttpRequest'和一個'ServiceStack.ServiceHost.IHttpResponse',但這些接口似乎並沒有聲明'.Method()'或'.EndServiceStackRequest()'方法。我正在使用'使用ServiceStack.ServiceHost;'我錯過了什麼? – AndrewCr

+0

@AndrewCr使用'httpReq.HttpMethod'而不是'httpReq.Method'和'httpRes.EndRequest()'而不是'httpRes.EndServiceStackRequest()' – eXavier