Propr1
и Propr2
для объекта javascript, но в модели C # у вас были Prop1
и Prop2
(отсутствует «r»). stringify
перед отправкой данных и не устанавливайте dataType
на json
. MVC может отлично разбираться с набором параметров сообщений без сериализации json в вашем коде. contentType
, это необязательно. WebAPI должен автоопределить это. Javascript Клиентская сторона:
var myData = {Prop1: '', Prop2: ''}; // #1
$.ajax({
type: 'POST',
data: myData, // #2
url: '/Home/SubmitMyData',
//contentType: 'application/json', #3
//dataType: 'json', #2
success: alert('Youhou'),
error: alert('not good')
});
C # Метод на стороне сервера:
public ActionResult SubmitMyData(MyParamModel myParam)
{
// Do my stuff here with my parameter
return View();
}
public class MyParamModel // #4
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
Взгляните на класс ByteBuffer .
ByteBuffer b = ByteBuffer.allocate(4);
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN.
b.putInt(0xAABBCCDD);
byte[] result = b.array();
Установка порядка байтов гарантирует, что result [0] == 0xAA
, result [1] == 0xBB
, result [2] == 0xCC
и result [3] == 0xDD
.
Или же вы можете сделать это вручную:
byte[] toBytes(int i)
{
byte[] result = new byte[4];
result[0] = (byte) (i >> 24);
result[1] = (byte) (i >> 16);
result[2] = (byte) (i >> 8);
result[3] = (byte) (i /*>> 0*/);
return result;
}
Класс ByteBuffer
был разработан для таких «грязных» задач. Фактически, частный java.nio.Bits
определяет эти вспомогательные методы, которые используются ByteBuffer.putInt ()
:
private static byte int3(int x) { return (byte)(x >> 24); }
private static byte int2(int x) { return (byte)(x >> 16); }
private static byte int1(int x) { return (byte)(x >> 8); }
private static byte int0(int x) { return (byte)(x >> 0); }
Простое решение, которое правильно обрабатывает ByteOrder:
ByteBuffer.allocate(4).order(ByteOrder.nativeOrder()).putInt(yourInt).array();
Использование BigInteger
:
private byte[] bigIntToByteArray( final int i ) {
BigInteger bigInt = BigInteger.valueOf(i);
return bigInt.toByteArray();
}
Использование DataOutputStream
:
private byte[] intToByteArray ( final int i ) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(i);
dos.flush();
return bos.toByteArray();
}
Использование ByteBuffer
:
public byte[] intToBytes( final int i ) {
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(i);
return bb.array();
}
Вы можете использовать BigInteger
:
Из целых чисел:
byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }
Возвращаемый массив имеет размер, необходимый для представления числа, поэтому он может иметь размер 1, например, для обозначения 1. Однако размер не может быть больше четырех байтов, если передается int.
From Strings:
BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();
Однако вам нужно будет следить, если первый байт больше 0x7F
(как и в данном случае), где BigInteger вставит байт 0x00 в начало массива. Это необходимо, чтобы различать положительные и отрицательные значения.