use*_*447 4 javascript asp.net-mvc-4
我在我的客户端Web应用程序上使用js-scrypt(https://github.com/tonyg/js-scrypt)来哈希和盐密码,然后将它们发布到我的服务器端.NET MVC应用程序进行哈希处理再次腌制.此JavaScript库将字节数组实现为JavaScript Uint8Arrays.如何让我的MVC控制器将我的JSON Uint8Array反序列化为byte []?
JavaScript示例:(AJAX.Post是我写的库,myUint8Array正确序列化)
AJAX.Post('www.example.com/SendByteArray', { myByteArray: myUint8Array }, Callback);
Run Code Online (Sandbox Code Playgroud)
C#示例:(在我的默认控制器中)
[HttpPost]
public async Task<JsonResult> SendByteArray(byte[] myByteArray) {
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,myByteArray始终为null.我尝试了几种不同的方法,基于转换为字符串,然后返回到byte [],但我无法获得正确的值.如果我能够以某种方式直接将代码实现到.NET的JSON解串器中以便上面的代码完全按原样工作,那将是非常优选的,因为我有一些其他项目,如果我可以直接传递字节数组,我可以做一些很酷的事情服务器端和客户端应用程序.
现在我唯一可以使用的方法是对Uint8Array进行base64编码,将其作为C#中的字符串捕获,然后将该字符串转换为byte [].
JavaScript的:
AJAX.Post('www.example.com/SendByteArray', { strByteArray: btoa(String.fromCharCode.apply(null, myUint8Array)) }, Callback);
Run Code Online (Sandbox Code Playgroud)
C#:
[HttpPost]
public async Task<JsonResult> SendByteArray(string strByteArray) {
byte[] myByteArray = Convert.FromBase64String(strByteArray);
}
Run Code Online (Sandbox Code Playgroud)
更改您的控制器操作以接受代替int[],byte[]然后转换为字节数组。post 值仍然可以是 JSON 数组。
[HttpPost]
public async Task<JsonResult> SendByteArray(int[] myByteArray) {
byte[] theBytes = myByteArray.Select(i => (byte)i).ToArray();
// Or any one of a dozen other ways of converting it
}
Run Code Online (Sandbox Code Playgroud)
为了发布到字节数组,您必须在客户端对字节进行 base-64 编码,并将其作为字符串传递。
可能还有其他选择,例如过滤器或属性或类似的东西,但这是我所知道的最简单的方法。
| 归档时间: |
|
| 查看次数: |
8493 次 |
| 最近记录: |