ServiceStack是否支持多个来源的CORS?

时间:2013-04-26 18:59:38

标签: servicestack

使用CorsFeature插件,我如何支持多个源域?我不是在说这里的通配符“*”。我正在谈论传递一个包含多个来源的列表:“http://firstdomain.comhttp://seconddomain.com”。

1 个答案:

答案 0 :(得分:5)

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

或使用全局请求或预请求过滤器:

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