内部Web应用程序的CORS和ServiceStack后端

时间:2013-06-21 13:09:49

标签: servicestack cors

所有

我们正在努力将ServiceStack用作所有内部和前向站点的后端API,但我们遇到了问题。以下是问题......

网站

 - site1.xyz.com
 - site2.xyx.com
 - etc.xyx.com

API
 - api.xyx.com

1)我们需要一个自定义请求标头来处理身份验证。我们的应用程序向API服务器发送应用程序ID以验证应用程序,因此JSONP已经用完。

2)由于JSONP已经出局,我们需要支持OPTIONS。我有这个在Chrome和IE上工作,但IE正在抛出该死的安全弹出窗口。我们可以通过内部用户解决这个问题,但不能与外部用户解决。

如果有人对如何做到这一点有任何建议,我很乐意听到他们的意见。我希望CORS规范处理子域名。如果确实如此,这将是有效的,并且生病简单...

1 个答案:

答案 0 :(得分:2)

我是使用CORS的新手,但我确实使用了OPTIONS。

public class YourService : Service
{
    ... 
    /// <summary>
    /// CORS support
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public object Options(YourRequestDto request)
    {
        // return HTTP Code and Location: header for the new resource
        // 204 No Content; The request was processed successfully, but no response body is needed.
        return new HttpResult()
        {
            StatusCode = HttpStatusCode.NoContent,
            Headers = {
                { "Access-Control-Allow-Origin", "*" },
                { "Access-Control-Allow-Methods", "GET, OPTIONS" } ,
                { "Access-Control-Allow-Headers", "Content-Type" }, 
            }
        };
    }
}

我的参考是:servicestack REST API and CORS

Web浏览器应该在那里处理OPTIONS请求。然后进行GET,POST等操作。

此示例允许所有域(*),但您可以添加自己的逻辑以适应。

仅供参考 - 我认为IE在IE 10之前不具备完整的CORS支持。