Я пытаюсь передать массив байтов в мой WebMethod через JavaScript. Проблема в том, что мой WebMethod возвращается с сообщением "тестовая форма доступна только для примитивных методов в качестве параметров".
Когда я изменяю тип данных на строку или любые другие примитивные переменные, WebMethod принимает это.
Я преобразовываю объект в байт [], называемый msgpackEnvio, используя MessagePack (само преобразование происходит хорошо), а затем отправляется в WebService.
Здесь мой запрос к WebService с использованием jquery
$.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";
}
Вы можете использовать кодировку и декодирование base64 для отправки массивов байтов в виде строк. Что-нибудь еще, и вы можете вместо этого использовать пост-запросы и сериализацию/десериализацию JSON. Там не будет общий размер, соответствующий всем преобразованиям между сложными объектами С# и объектами javascript, поэтому разрешены только примитивные параметры, поэтому для непримитивных вещей вам потребуется слой перевода. Это обычно означает некоторую форму сериализации строк и десериализации.