发送/接收byte []使用AJAX和ASP.NET MVC

概述:下面是我正在做的事情的总结说明 - 我有一个不断运行的C#应用​​程序,它包含一个HTTPListener并等待请求。 然后有一个MVC Web应用程序,其中一个页面是一个按钮,它触发一些JS,它会在HTTP侦听器正在侦听的地址上执行ajax张贴,单击该按钮时,侦听器捕获此请求,然后C#应用程序执行一些其他工作(与问题无关),然后生成一个字节数组。 然后,这个字节数组被送回作为响应原始请求的一部分,所以success的AJAX后发出请求的功能被触发,在成功的函数的参数数据的字节数组。 现在又创建了一个ajax文章,但是这次到了MVC控制器,以便字节数组可以保存在我的数据库中:

在这里输入图像描述 这是一些代码。

首先,下面是向HTTP Listener发出请求的ajax帖子,与帖子一起传递的数据仅仅是我使用的一些元数据(现在忽略成功函数中的代码):

$.ajax({
 type: "POST",
 url: 'http://127.0.0.1:8089/',
 data: '{ "Action":"Enroll", "RefUser":"6" }',
 crossDomain: true,
 success: function (data) {

 //Code that posts array to server to be saved in DB

}); //end of ajax

这里是HTTP侦听器的回调方法,它捕获请求并发送响应:

var context = listener.EndGetContext(listenerresult);
Thread.Sleep(1000);
var data_text = new StreamReader(context.Request.InputStream,context.Request.ContentEncoding).ReadToEnd();

//functions used to decode json encoded data.
JavaScriptSerializer js = new JavaScriptSerializer();
RequestConfiguration RequestConfig = (RequestConfiguration)js.Deserialize(data_text, typeof(RequestConfiguration));

byte[] templateDataArray = null;

//Do some work and assign value to the byte array, 'templateDataArray'

//I append a status code and a message to the array of bytes and send everthing back as a response
//The values are split using the '<>' characters.
byte[] msgDataArray = System.Text.Encoding.UTF8.GetBytes("1<>Success" + "<>");

byte[] responseArray = new byte[msgDataArray.Length + templateDataArray.Length];
msgDataArray.CopyTo(responseArray, 0);
templateDataArray.CopyTo(responseArray,msgDataArray.Length);

var response = context.Response;
response.ContentLength64 = responseArray.Length;
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Methods", "POST, GET");
response.StatusCode = 200;
response.StatusDescription = "OK";
response.OutputStream.Write(responseArray, 0, responseArray.Length);
response.OutputStream.Close();

现在看看原始ajax文章的成功功能:

 ...
 success: function (data) {

 //Code that posts array to server to be saved in DB

 var returnArray = data.split("<>");

 if (returnArray[0] === "1") {
  alert(returnArray[1]);
  $("#Loader").addClass('hide');

  $.ajax({
    type: "POST",
    url: '@Url.Action("EnrollFingerprintToDB")',
    dataType: 'json',
    data: { enrollData: NewID + '<>' + returnArray[2] },
    success: function (data) {

      alert(data.msg);

    }

  });//end of inner ajax

 } //end of if

} //end of success
...

当我做一个示例运行时,这里是我回到成功函数中的内容,让我们看看它被分割后的数据(var'returnArray'):

在这里输入图像描述

请注意,我们现在将returnArray[2]到包含字节数组(现在编码为字符串)的MVC控制器。 这是捕获该帖子的mvc控制器:

[HttpPost]
public ActionResult EnrollFingerprintToDB(string enrollData)
{
    string[] sDataParts = enrollData.Split(new[] { "<>" }, StringSplitOptions.None);

    var bytes = System.Text.Encoding.UTF8.GetBytes(sDataParts[1]);

    if (FingerprintBLL.InsertFingerprintTemplate(int.Parse(sDataParts[0]),bytes))
    {
        return Json(new { success = true, msg = "Template successfully saved" });
    }
    else
    {
        return Json(new { success = true, msg = "Template could not be saved" });    
    }

}

什么关心我,我的问题是什么

为什么我从监听器发出的数组与我最终在MVC控制器中读取的数组不同? 我说的原因是,这是从监听器发送的字节数组:

这里是MVC控制器收到的数组:

正如你所看到的MVC控制器行动接受一个字符串被分成两部分,第二部分被转换成一个字节数组,第二部分是从监听器接收到的字符串形式的字节数组(再看看第二部分阿贾克斯后,你会看到它)。

我相信我正在采取错误的方法来发送和接收字节数据。

链接地址: http://www.djcxy.com/p/6677.html

上一篇: Sending/Receiving byte[] With AJAX and ASP.NET MVC

下一篇: Making a Simple Ajax call to controller in Mvc