3
使用CorsFeature插件,我如何支持多個原始域?我不是在說這裏的通配符「*」。我在談論通過一個以上的來源列表:「http://firstdomain.com,http://seconddomain.com」。ServiceStack是否支持多個來源的CORS?
使用CorsFeature插件,我如何支持多個原始域?我不是在說這裏的通配符「*」。我在談論通過一個以上的來源列表:「http://firstdomain.com,http://seconddomain.com」。ServiceStack是否支持多個來源的CORS?
ServiceStack的CorsFeature只是一個簡單的插件,將CORS Headers添加到ServiceStack的全局響應頭。它支持指定數量的主機(或*
通配符),例如:
Plugins.Add(new CorsFeature(
allowOriginWhitelist = new[]{ "http://domain1.com", "http://domain2.com" },
string allowedMethods = DefaultMethods,
string allowedHeaders = DefaultHeaders,
bool allowCredentials = false));
如果您需要更多的自定義,然後就可以直接跳過的功能,只添加,你想註冊成爲許多定製的響應報頭,例如:
public override void Configure(Container container)
{
//Permit Cross Origin Resource Sharing for multiple Origins:
base.SetConfig(new HostConfig
{
GlobalResponseHeaders = {
{ "Access-Control-Allow-Origin", "http://domain.com" },
{ "Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS" },
{ "Access-Control-Allow-Headers", "Content-Type" },
},
});
}
或使用全局請求或PreRequest篩選:
public override void Configure(Container container)
{
var originWhitelist = new[]{ "http://domain1.com", "http://domain2.com" };
this.PreRequestFilters.Add((httpReq, httpRes) => {
var origin = httpReq.Headers.Get("Origin");
if (originWhitelist.Contains(origin))
{
httpRes.AddHeader(HttpHeaders.AllowOrigin, origin);
}
httpRes.AddHeader(HttpHeaders.AllowMethods, "GET, POST, PUT, OPTIONS");
httpRes.AddHeader(HttpHeaders.AllowHeaders, "Content-Type");
});
}
第二種方法不起作用,因爲您要添加相同的鍵兩次。 – iwayneo 2014-04-01 14:42:01
如何使用第二種方法添加多個原點? – iwayneo 2014-04-02 08:48:25
@iwayneo你不能這樣做,因爲正如你所說,這是一個不允許多鍵的字典,我已經添加了一個使用PreRequest過濾器作爲替代的例子。 – mythz 2014-04-02 09:06:47