我编写了一些驻留在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中删除它们,它就按预期工作了。