如何在Angular 5+中使用大数字?

4

我正在使用Angular 5和.Netcore 2.0。我正在使用API控制器处理推文(LinqToTwitter)。推文通过我的TypeScript从控制器传递过来,除了statusID之外都很好。

statusID应该是: XXXXXXXXXXXXXXXX573

但它作为XXXXXXXXXXXXXXXX600传递到TypeScript中。

API控制器:

[HttpPost("[action]")]
public async Task<Search> GetAllTweetsByNamePost([FromBody] SearchQuery searchQuery)
{
    searchVal = searchQuery.Name;
    Twitter twit = new Twitter();
    twit.Initialise();
    var t = await twit.Fetch(searchVal, 50, true, SearchType.Search);
    return t[0];
}

当我在控制器中检查Status ID时,显示的ID是正确的,但当它到达TS statusID时,数字有一定的模式。
前16位数字是正确的,而最后三位会以100递增,例如:
XXXXXXXXXXXXXXXX100 XXXXXXXXXXXXXXXX200 XXXXXXXXXXXXXXXX300
在Api控制器中,我使用了LinqToTwitter Status object。在Status object属性类型为public ulong SinceID { get; set; },而我已经将TS模型的属性设置为statusID: any;
getSocialDataTwitter(searchQuery) {
    const headers = new HttpHeaders().set('content-type', 'application/json');
    return this.http.post<LeftOperatorPaneltwitter>(this.baseUrl + 'api/OperationData/GetAllTweetsByNamePost', '{"Name":"' + searchQuery + '"}', { headers }).subscribe(result => {
      this.tweets = result;
      result.statuses.forEach(search => {
        console.log(search.statusID + ' This is my Status ID');
      })
    }, error => console.error(error));
  }

2
为什么不使用字符串? - user4676340
我正想建议同样的事情 :P - SiddAjmera
我已经尝试了字符串。结果相同。 - Dev
是的,控制台显示了错误的数字。除了 statusID 有19位数字之外,所有其他数据都正常。 - Dev
是的!Network>GetAllTweetsByNamePost>预览。也有错误的值。 - Dev
1个回答

3

Javascript无法处理这样长度的数字。根据此文档,最大安全整数值为:9007199254740991。建议将您的ID表示为字符串


好的,谢谢。值太长了,因为我使用了LinqToTwitter模型,它有一个ulong属性。我创建了一个压缩版本的“搜索”模型,并将“statusID”更改为字符串。我意识到我必须在Api端更改类型,因为有人在上面的评论中建议检查网络选项卡中的数据,那里的数据也是错误的。 - Dev
1
@Decoder94 是的,那是我的建议。我一意识到 JavaScript 有这个限制就删除了问题。 - David Walschots

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接