Asp.net web api Breezejs如何调试查询响应中TypeError的原因

Asp.net web api Breezejs如何调试查询响应中TypeError的原因,asp.net-web-api,runtime-error,breeze,Asp.net Web Api,Runtime Error,Breeze,我试图使用Breeze查询ASP.Net Web API端点,但查询失败-数据对象包含: internalError: TypeError arguments: Array[2] 0: "createCtor" 1: null length: 2 __proto__: Array[0] get message: function () { [native code] } get stack: function () { [native code] } set message: function

我试图使用Breeze查询ASP.Net Web API端点,但查询失败-数据对象包含:

internalError: TypeError
arguments: Array[2]
0: "createCtor"
1: null
length: 2
__proto__: Array[0]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "non_object_property_load"
数据对象有一个message(和responsetext)属性,其中包含来自查询的完整json响应,该响应看起来正常,并且生成的元数据与响应匹配——它还记录响应的状态200

所以我猜在将响应映射到客户端的对象时会出现某种问题

我正在使用适用于Breeze版本0.85.2的NuGet包

我可以让示例ToDo项目在相同的环境中正常运行

我的项目确实使用了来自不同程序集和名称空间的域对象、上下文等,但我知道这个版本支持这些吗

另外,其中一个属性是枚举-在元数据中,它被定义为
{\'name\':\'State\',\'type\':\'Edm.Self.State\',\'nullable\':\'false\'}]
,但在响应中是作为整数传递的

寻找关于如何在客户端进一步调试的提示

更新

将工作示例与我的代码进行比较,错误似乎来自此函数:

/**
Returns the constructor for this EntityType.
@method getEntityCtor
@return {Function} The constructor for this EntityType.
**/
ctor.prototype.getEntityCtor = function () {
    if (this._ctor) return this._ctor;
    var typeRegistry = this.metadataStore._typeRegistry;
    var aCtor = typeRegistry[this.name] || typeRegistry[this.shortName];
    if (!aCtor) {
        var createCtor = v_modelLibraryDef.defaultInstance.createCtor;
        if (createCtor) {
            aCtor = createCtor(this);
        } else {
            aCtor = function() {
            };
        }
    }
    this._setCtor(aCtor);
    return aCtor;
};
v_modelLibraryDef上的defaultInstance属性在我运行的代码中没有定义-我在breeze的配置中缺少了什么

更新2-已解决,但原因是什么


好吧,我开始工作了——我错过了一个关于淘汰赛的参考(我本来打算用它,但还没到那个地步)-我有点被breeze的先决条件误导了,因为breeze的先决条件没有提到敲除,所以如果有人能解释我是如何在没有敲除的情况下实现这一点的,如果这是一个bug,那么每次我遇到一个错误,响应的Message属性是json格式的数据,这意味着我的函数中有一个bug获取数据后运行

例如:

dataservice.getPalanca(routeData.PalancaID)
.then(function (data) {
    self.palanca(data.results[0]);
})
.fail(function (error) {
    console.log(error); /*if I get here and error.Message == correct json almost always means error in .then function*/
    toastr.error("Ha ocurrido un error al obtener los datos");
});

希望我能帮助您。

此错误似乎与您的一个实体类型构造函数有关。我猜您正在代码中的某个地方调用'registerEntityTypeCtor'方法。如果是这样,那么我会在您正在注册的构造函数中放置一个断点

根据您的其他注释,.NET枚举应该在breeze客户端上转换为整数。这是唯一能够支持它们的“基本”数据类型。当您调用“EntityManager.saveChanges”时,它们将转换回服务器上的枚举


Breeze不需要“击倒”,您也可以使用“angularjs”或“主干”。如果您不指定另一个库,我们只是将breeze客户端默认为knockout。请参阅“breeze.config.initializeAdapterInstance”主题。我们确实需要更好地记录这一点。

很抱歉,理查德。我们将努力从中吸取教训,让下一个人免受你所忍受的痛苦

FWIW,我们不是说淘汰赛是先决条件。。。因为KO不是先决条件。您可以使用角度或主干代替,我们预计未来会有其他替代方案

我们不想在您刚刚学习Breeze时让您淹没在配置选项中。因此,我们选择KO作为默认模型库(正如jQuery是默认的AJAX提供者,webapi是默认的“数据服务”技术)。我们在许多地方这样说;先决条件看起来是另一个值得一提的好地方

碰巧,您打算使用KO,因此不需要配置。大多数人从MVC模板开始,该模板包含KO,并将其加载到Index.cshtml中

很显然,您是从一个全新的开始(“ASP空Web应用程序”也许?)。BreezeWebAPI NuGet包力求备用,因此不包括KO。我们(错误地)认为你会自己添加它。。。按正确的脚本顺序。。。如果你想用KO。显然,我们可以更好地记录这条特殊的发展道路。。。尤其是我们自己非常喜欢它谢谢您指出这一点


另一个问题是,异常没有帮助。你可以从回答你问题的其他尝试中看到,即使是有微风经验的人也无法识别出问题所在。我们将看看是否可以更早地检测到丢失的脚本,并抛出一个异常,并显示一条更好的消息。

得到了相同的错误,引用knockout.js也有帮助(我正在为我的应用程序使用angularjs)

但是。 看起来,默认情况下,数据映射器与knockout一起工作,所以我们将XHR结果作为带有可观测项的K.O.模型

所以我添加了breeze.config.initializedapterninstance(“modelLibrary”,“backingStore”,true)

现在我没有收到数据。结果作为可观察的集合


希望我的回答能有所帮助。

谢谢Julian,但我已经将“then”函数简化为一个简单的警报并返回true-警报是第一行,它从未被调用过。我使用过空的web应用程序模板,并在开始使用它们时在其中添加了库-现在我对Breeze留下了深刻的印象!
  manager.executeQuery(query).then(function(data) {
        console.log(data);
    });