【发布时间】:2017-03-09 10:46:26
【问题描述】:
我有一个非常简单的 ASP.Net WebAPI 2 方法,我希望它可以通过 HTTP 发送一个小的字节数组:
[Route("api/assemblybytes")]
public byte[] GetAssemblyBytes()
{
//byte[] bytes = null;
//if (File.Exists("BasePCBScreenAssembly.dll"))
//{
// using (var fs = File.Open("BasePCBScreenAssembly.dll", FileMode.Open, FileAccess.Read))
// {
// fs.Read(bytes, 0, (int)fs.Length);
// }
//}
//return bytes;
return new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
}
为了测试这个函数,我用一个包含字节 0x20 七次的简单数组替换了预期的代码(在上面注释掉了)。为了测试我的代码,我有一个简单的网页:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Assembly Distribution WebAPI Test Page</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
var uri = 'api/assemblybytes';
$(document).ready(function () {
$.getJSON(uri)
.done(function (data) {
var bytes = [];
for (var i = 0; i < data.length; ++i) {
bytes.push(data.charCodeAt(i));
}
$('#AssemblyBytes').text(bytes)
});
});
</script>
</head>
<body>
<div>
<h2>GetAssemblyBytes</h2>
<pre id='AssemblyBytes'/>
</div>
</body>
</html>
我希望使用网页来查看在字节数组的开头或结尾添加了哪些字节或文本。但相反,我看到了这个和返回到网页的字节:
73,67,65,103,73,67,65,103,73,65,61,61
所以我的 0x20(十进制的 32)甚至没有出现一次。
(注意,这似乎是一个人为的例子。实际的客户端不是网页,而是一个 .Net Micro Framework 嵌入式设备,它将(我希望)从 WebAPI 以字节数组的形式下载小型动态程序集。)
我做错了什么或遗漏了什么?使用 ASP.Net WebAPI 通过 HTTP 传输字节数组的最佳方式是什么?
【问题讨论】:
-
任何想要通过 web api 和 IHTTPActionResult 的流返回字节的人,然后在这里查看:nodogmablog.bryanhogan.net/2017/02/…
标签: c# asp.net-web-api