2013-04-26 65 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