2015-03-31 37 views
1

我正在WebAPI中使用CORS支持,并从EntityManager中获取奇怪的结果集,甚至认为我从服务器获得了状态码200和数据。响应得到Breeze在Chrome中状态为OK的错误消息“;”

错误消息(截断):

{message: "; ", statusText: "OK", status: 200, url:"http://localhost:61808/odata/Servers?$filter=Id%20gt%2080&$top=20&$expand=Owner%2CApplications"} 

我的DataContext:

(function() { 
    angular.module('App').factory('datacontext', datacontext); 

    datacontext.$inject = ['EntityManagerFactory']; 

    function datacontext(EntityManagerFactory) { 
    var EntityQuery = breeze.EntityQuery; 
    var Manager = EntityManagerFactory.newManager(); 

return { 
    getServers: getServers 
}; 

function getServers() { 
    return EntityQuery 
    .from('Servers') 
    .expand('owner, applications') 
    .where('id', 'gt', 80) 
    .take(20) 
    .toType('server') 
    .using(Manager) 
    .noTracking() 
    .execute() 
    .then(success) 
    .catch(error); 
} 

function success(response) { 
    return response.results; 
} 

function error(error) { 
    console.log(error); 
} 

我的WebAPI的web.config:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type, DataServiceVersion, MaxDataServiceVersion" /> 
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS, MERGE" /> 
    </customHeaders> 
</httpProtocol> 

此代码运行正常的IE浏览器。但是,即使有效载荷已交付,Chrome中也会抛出此错误!有任何想法吗?

回答

1

当前版本的datajs 1.1.2中存在一个bug,它在codeplex上的问题https://datajs.codeplex.com/workitem/756上提出。

在datajs.js替换readResponseHeaders有:

var readResponseHeaders = function (xhr, headers) { 
    /// <summary>Reads response headers into array.</summary> 
    /// <param name="xhr" type="XMLHttpRequest">HTTP request with response available.</param> 
    /// <param name="headers" type="Array">Target array to fill with name/value pairs.</param> 

    var responseHeaders = xhr.getAllResponseHeaders().split(/\r?\n/); 
    var i, len; 

    for (i = 0, len = responseHeaders.length; i < len; i++) { 
    if (responseHeaders[i]) { 
     var header = responseHeaders[i].split(": "); 
     headers[header[0]] = header[1]; 
    } 
    } 

    // Fix to handle Firefox CORS bug 
    var requiredHeaders = [ 
    'Content-Type', 'DataServiceVersion' 

    /*, 'Content-Length' 
    , 'Cache-Control' 
    , 'Access-Control-Expose-Headers' 
    , 'X-Content-Type-Options' 
    , 'Date'*/ 
    ]; 

    for (i = 0; i < requiredHeaders.length; i++) { 
    if (headers[requiredHeaders[i]] === undefined && 
     xhr.getResponseHeader(requiredHeaders[i])) { 
     headers[requiredHeaders[i]] = xhr.getResponseHeader(requiredHeaders[i]); 
    } 
    } 
}; 

,并在web.config中的WebAPI添加:

 <add name="Access-Control-Expose-Headers" value="DataServiceVersion" /> 
相关问题