SharePoint 2013的ServiceStack CORS问题

时间:2014-09-01 03:17:59

标签: ajax servicestack cors

我编写了一些驻留在SharePoint 2013中的ServiceStack服务。当从SharePoint中的其他页面访问时,这些服务按预期工作

我现在正尝试从组织内的其他域访问这些服务,因此我尝试配置CORS。

我在配置方法中添加了以下内容:

 var config = new HostConfig
            {
                EnableFeatures = Feature.All.Remove(disableFeatures),
                DefaultContentType = "application/json",
                GlobalResponseHeaders =
                {
                    {"Access-Control-Allow-Origin", "http://subdomain.mydomain.com"},
                    {"Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"},
                    {"Access-Control-Allow-Headers", "Content-Type"},
                    {"Access-Control-Allow-Credentials", "true"}
                }
            };

我正在使用jQuery ajax请求调用该服务:

$.ajax(
    {
        type: method,
        data: data,
        xhrFields:
        {
            withCredentials: true
        },
        url: url,
        async: false,
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        success: function(result)
        {
            returnResult = result;
        }
    });

进行此调用时,我收到CORS错误(请求的资源上没有“Access-Control-Allow-Origin”标头),即使已指定标头

如果我更改我的ajax请求以发送 text / plain 的contentType,我正确地访问该服务(在调试器中确认),但是我的请求对象没有填充任何属性传入的数据(即默认值/ null):

$.ajax(
    {
        type: method,
        data: JSON.stringify(data),
        xhrFields:
        {
            withCredentials: true
        },
        url: url,
        async: false,
        contentType: "text/plain; charset=utf-8",
        datatype: "json",
        success: function(result)
        {
            returnResult = result;
        }
    });

我正在指定凭据标题&参数否则我在尝试访问服务时收到401 Unauthorized标头。

我正试着弄清楚什么是错的......任何帮助都是值得赞赏的

更新

我设法让这个工作,但我不满意,因为我无法理解为什么它的工作。我最终手动将Access-Control标头添加到IIS并从我的ServiceStack配置中删除它们。 似乎没有在IIS中定义的头文件,我在ServiceStack有机会处理请求之前就被拒绝了。使用IIS和ServiceStack中定义的标头,我收到与指定多个Access-Control-Allow-Origin标头相关的错误。一旦我从ServiceStack中删除它们,它就按预期工作了。

0 个答案:

没有答案