2013-04-26 98 views

回答

6

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"); 
    }); 
} 
+0

第二種方法不起作用,因爲您要添加相同的鍵兩次。 – iwayneo 2014-04-01 14:42:01

+0

如何使用第二種方法添加多個原點? – iwayneo 2014-04-02 08:48:25

+0

@iwayneo你不能這樣做,因爲正如你所說,這是一個不允許多鍵的字典,我已經添加了一個使用PreRequest過濾器作爲替代的例子。 – mythz 2014-04-02 09:06:47