将会话对象中的字节数组传递给Web服务(Asp. js).Net 2.0 asmx)通过一个JSON对象
本文关键字:对象 asmx Net 会话 JSON 一个 js Asp 数组 字节数 字节 | 更新日期: 2023-09-27 18:11:45
我有一个代码:
会话["timestamp"]有一个字节数组在它使用LInq到实体
现在当我调用这个函数时,它会抛出一个错误
web服务的签名如下:
[WebMethod]
public string IsRowChanged(int en_id , byte[] timestamp)
{
}
如果我将byte[]替换为string,它就会正常工作。
$.ajax({
type: "POST",
url: "UpdateEntityService.asmx/IsRowChanged",
data: "{ 'en_id':'" + '<%= Request.QueryString["entity_id"] == null ? "1" : Request.QueryString["entity_id"] %>' + "' , 'timestamp': '" + '<%= (Session["timestamp"]) %>' + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var result = msg.d;
if (result == "0") {
save_valid();
$.prompt("Data Saved Sucessfully");
}
else {
$.prompt("Data Concurrency Error! Reload the Page.. by pressing F5");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(textStatus);
alert(errorThrown);
}
});
您应该对二进制数据进行Base编码,并在服务器端将其转换回byte[]。
// returns a byte[]
System.Convert.FromBase64String(base64String);
// returns a string
System.Convert.ToBase64String(byteData);
试试这个。将其作为字符串传递,并将其转换为
函数中的ByteArray。[WebMethod]
public string IsRowChanged(int en_id , string ts)
{
byte[] timestamp = Encoding.UTF8.GetBytes(ts);
// rest of your function here
}
如果你不知道编码类型,使用这个函数
private byte[] ConvertStringToBytes(string input)
{
MemoryStream stream = new MemoryStream();
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(input);
writer.Flush();
}
return stream.ToArray();
}
使用的命名空间:using System.IO;
关键是,无论使用哪种编码,都要使用相同的解码方法来检索它。下面是一个ASCII编码/解码
的示例在您的页面上这样编码。
string value = ASCIIEncoding.ASCII.GetString(temp_array);
HttpContext.Current.Session["timestamp"] = value;
现在在ASMX解码像这样。
[WebMethod]
public string IsRowChanged(int en_id , string ts)
{
byte[] timestamp = Encoding.ASCII.GetBytes(ts);
// rest of your function here
}