Breeze Can';t更新到Microsoft.AspNet.WebApi.OData 5.3.x后,将数据保存到OData controller
不确定到底是什么发生了更改并导致此部分错误(因为检索数据时不会发生此错误),但在将Microsoft.AspNet.WebApi.OData library更新为5.3.x版本后,breeze在将数据保存到OData controller时遇到问题。它是关于批处理请求的URL的 它也可以通过breeze自己的OData项目样本进行复制Breeze Can';t更新到Microsoft.AspNet.WebApi.OData 5.3.x后,将数据保存到OData controller,breeze,asp.net-web-api-odata,Breeze,Asp.net Web Api Odata,不确定到底是什么发生了更改并导致此部分错误(因为检索数据时不会发生此错误),但在将Microsoft.AspNet.WebApi.OData library更新为5.3.x版本后,breeze在将数据保存到OData controller时遇到问题。它是关于批处理请求的URL的 它也可以通过breeze自己的OData项目样本进行复制 如果查看BatchHandler类的ExecuteRequestMessagesSync方法,则项的RequestUri属性包含OData路由前缀两次 Micr
如果查看BatchHandler类的
ExecuteRequestMessagesSync
方法,则项的RequestUri
属性包含OData路由前缀两次
Microsoft.AspNet.WebApi.OData库5.2.2 url
http://localhost:55802/odata/TodoItems
Microsoft.AspNet.WebApi.OData库5.3.1 url
http://localhost:55802/odata/odata/TodoItems
有没有办法解决这个问题
微风版:1.5.1哦,快乐。Microsoft已更改其Web API OData实现。。。再次 感谢您深入了解@coni2k并发现问题 幸运的是,您不必修补微风。我们故意公开了
getRoutePrefix
方法,以便您可以自己在外部更改它以满足您的需要
在下面的示例中,我已将您的建议合并到方法的主体中
var adapter = breeze.config.getAdapterInstance('dataservice', 'webApiOdata');
adapter.getRoutePrefix = getRoutePrefix531; // plug-in alternative for THIS adapter instance.
function getRoutePrefix531(dataService) {
// Copied from breeze.debug and modified for Web API OData v.5.3.1.
if (typeof document === 'object') { // browser
var parser = document.createElement('a');
parser.href = dataService.serviceName;
} else { // node
parser = url.parse(dataService.serviceName);
}
// THE CHANGE FOR 5.3.1: Add '/' prefix to pathname
var prefix = parser.pathname;
if (prefix[0] !== '/') {
prefix = '/' + prefix;
} // add leading '/' (only in IE)
if (prefix.substr(-1) !== '/') {
prefix += '/';
} // ensure trailing '/'
return prefix;
};
在我写这篇文章时,我们不确定如何检测您正在使用的Web API OData的哪个版本,这使得我们很难事先确定哪个版本的getRoutePrefix
适合您的应用程序
希望最终能解决这个问题。不要胆敢将默认设置更改为这个新版本,因为这会破坏所有必须与旧版本的Web API OData对话的现有应用程序。我不知道我们怎样才能赢这场比赛。我们来看看。现在令人沮丧 哦,快乐。Microsoft已更改其Web API OData实现。。。再次 感谢您深入了解@coni2k并发现问题 幸运的是,您不必修补微风。我们故意公开了
getRoutePrefix
方法,以便您可以自己在外部更改它以满足您的需要
在下面的示例中,我已将您的建议合并到方法的主体中
var adapter = breeze.config.getAdapterInstance('dataservice', 'webApiOdata');
adapter.getRoutePrefix = getRoutePrefix531; // plug-in alternative for THIS adapter instance.
function getRoutePrefix531(dataService) {
// Copied from breeze.debug and modified for Web API OData v.5.3.1.
if (typeof document === 'object') { // browser
var parser = document.createElement('a');
parser.href = dataService.serviceName;
} else { // node
parser = url.parse(dataService.serviceName);
}
// THE CHANGE FOR 5.3.1: Add '/' prefix to pathname
var prefix = parser.pathname;
if (prefix[0] !== '/') {
prefix = '/' + prefix;
} // add leading '/' (only in IE)
if (prefix.substr(-1) !== '/') {
prefix += '/';
} // ensure trailing '/'
return prefix;
};
在我写这篇文章时,我们不确定如何检测您正在使用的Web API OData的哪个版本,这使得我们很难事先确定哪个版本的getRoutePrefix
适合您的应用程序
希望最终能解决这个问题。不要胆敢将默认设置更改为这个新版本,因为这会破坏所有必须与旧版本的Web API OData对话的现有应用程序。我不知道我们怎样才能赢这场比赛。我们来看看。现在令人沮丧 沃德,谢谢你的回答。有一个小的打字错误,顺便说一句,函数中有两个括号,应该是;getRoutePrefix531(数据服务)。由于javascript知识有限&有点匆忙,我得出了一个有点误导性的答案。显然,我将更新问题并删除答案,以供参考。谢谢。修正了错误,谢谢你的回答。有一个小的打字错误,顺便说一句,函数中有两个括号,应该是;getRoutePrefix531(数据服务)。由于javascript知识有限&有点匆忙,我得出了一个有点误导性的答案。显然,我将更新问题并删除答案,以供参考。谢谢。修正了打字错误