如何在WebMethod中接收非原始数据?

时间:2017-06-23 17:21:25

标签: javascript c# json web-services webmethod

我试图通过JavaScript将一个字节数组传递给我的WebMethod。 问题是我的WebMethod返回消息"测试表单只适用于原始方法作为参数。"

当我将数据类型更改为字符串或任何其他类型的原始变量时,WebMethod接受它继续。

我正在将一个对象转换为一个byte [],使用MessagePack命名为msgpackEnvio(转换本身很好),然后发送到WebService。

这是我使用jquery

对WebService的请求
$.ajax({
                    beforeSend: function (request) {
                        request.setRequestHeader("Content-Type", "application/json");
                    },
                    processData: false,
                    dataType: "json",
                    url: url,
                    data: msgpackEnvio,
                    type: "POST",
                    error: function (data) {
                        $('#upload-load').hide();
                        $('.bt-enviar-excel').removeAttr('disabled', 'disabled');
                        var msg = document.getElementsByClassName('msg')[0];
                        msg.style.color = 'red';
                        msg.innerHTML = 'Erro interno servidor!';
                    },
                    success: //some code

事实上,上面的代码根本不重要,我的问题在于webService,以及如何使它接收数组或对象。

这是我的WebMethod应该能够接收一个字节[]

 [WebMethod]
public string TestMessagePack(byte[] name)
{        
    //my code

    return "Finish";
}

1 个答案:

答案 0 :(得分:0)

您可以使用base64编码和解码将字节数组作为字符串发送。除此之外的任何东西,你可能想要使用post请求和JSON序列化/反序列化。复杂的C#对象和javascript对象之间的所有转换都不是通用的,这就是为什么只允许原始参数的原因,因此对于非原始事物,您需要一个转换层。这通常意味着某种形式的字符串序列化和反序列化。