VB.NET使用ExchangeSharp遍历Poloniex挂单遇Invalid command错误求助
解决ExchangeSharp Poloniex接口获取挂单时的"Invalid command"错误
看起来你踩了延迟加载的坑,而且刚好和Poloniex API的调用时机撞在一起了——我来给你拆解问题和解决办法:
问题根源
你调用api.GetOpenOrderDetails()的时候,并没有真正发起Poloniex的API请求!因为IEnumerable(Of T)是延迟执行的,这个方法只是返回了一个"查询计划",只有当你尝试访问集合元素(比如调用Count、GetEnumerator().MoveNext())时,才会实际发送API请求。这时候Poloniex返回了"Invalid command"错误,导致代码崩溃。
快速解决办法
先把延迟加载的结果转为立即执行的集合(比如List(Of T)),这样API请求会在转换时就触发,错误也会更早暴露,方便排查:
Try ' 用ToList()强制立即执行API请求并加载所有结果 Dim openOrders As List(Of ExchangeOrderResult) = api.GetOpenOrderDetails().ToList() ' 现在可以安全操作集合了 Console.WriteLine($"当前挂单数量: {openOrders.Count}") For Each order In openOrders Console.WriteLine($"订单ID: {order.OrderId}, 交易对: {order.MarketSymbol}") Next Catch ex As ExchangeSharp.APIException Console.WriteLine($"API调用出错: {ex.Message}") Console.WriteLine($"错误堆栈: {ex.StackTrace}") End Try
进一步排查方向
如果转成List还是报错,就要从Poloniex API本身或者库的配置找问题:
- 检查API权限:确认你的Poloniex API密钥已经开启了"读取挂单"的权限,密钥和密码(Passphrase)没有填错,也没有过期。
- 验证API命令:Poloniex的私有API中,获取挂单的命令是
returnOpenOrders,你可以用Postman/curl直接调用这个接口,确认自己的密钥能正常返回结果,排除API本身的问题。 - 更新ExchangeSharp版本:旧版本的库可能对Poloniex的API命令处理有bug,尝试更新到最新版的ExchangeSharp,看看问题是否消失。
内容的提问来源于stack exchange,提问作者Touchy Clan
相关产品推荐
相关产品推荐

