【问题标题】:Byte array from backend is converted to something else on front-end来自后端的字节数组在前端转换为其他东西
【发布时间】:2018-12-15 11:36:41
【问题描述】:
[Route("encrypted")]
[HttpGet]
public sbyte[] Encrypted()
{
    var mm = System.IO.File.ReadAllBytes("C:\\test\\" + "fill.txt");
    sbyte[] sbt = new sbyte[mm.Length];
    Buffer.BlockCopy(mm, 0, sbt, 0, mm.Length);
    return sbt;
}

当我用鼠标悬停时它显示以下字节(这是正确的):

但是当我检查前端(javascript)时。它变成了一个不同的arrayBuffer:

前端代码如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/encrypted/', true);
xhr.responseType = 'arraybuffer'; //i have tried without this line too
xhr.onload = function (e) {
    if (this.status === 200) {
        console.log("received from server--------");
        console.log(e.currentTarget.response);
        console.log("received from server-------");
    }
};

xhr.send();

【问题讨论】:

  • 为什么在读取文件时使用sbyte?您应该只使用byte,因为ReadAllBytes 返回byte[] 而不是sbyte[]
  • 是的,我知道。我没有带符号字节,失真也随之发生。

标签: javascript c# asp.net-web-api asp.net-core


【解决方案1】:

您没有提出具体问题,但我认为这可能会有所帮助。

您的控制器操作正在响应 JSON。将json 转储到控制台会在前端显示与将sbt 转储到后端控制台相同的数组值。这是转储值的前端代码。

var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/values', true);
xhr.responseType = 'json';
xhr.onload = function (e) {
    if (this.status === 200) {
        console.log("json");
        const json = e.currentTarget.response;
        console.log(json);
        console.log("json");
    }
};

所以,您正在发送一个 JSON 数组。

顺便说一句,这里有一些关于arraybuffer 响应类型的链接。

【讨论】:

  • LOL 好收获。我决定将响应字节转储到String.fromCharCode(),然后我开始收到"[-55,65,38,-32,-61..."
  • @PatrickRoberts 出于好奇,你想完成什么?
  • 我只是觉得控制器是 JSON 序列化字节数组很有趣,你注意到这一点给我留下了深刻的印象。
  • 谢谢。你可以叫我鹰眼。
  • 虽然您的回答并没有帮助我从后端字节数组转到前端的 Arraybuffer,但我已经接受了您的回答。我已经尝试创建 customoutputformatter 来解决 json 问题,但仍然没有运气。有些东西告诉它问题所在的文件的字符集。对于任何想知道的人,这是我试图从后端传输到前端的加密文件。 20secquiz.com/fill.txt - 我无法在 Javascript 中将此文件加载到 ArrayBuffer 中,它只是出错了。
猜你喜欢
  • 2021-09-29
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多