ASP. NET core, jQuery .get, как сериализовать массив в строке запроса? - PullRequest
0 голосов
/ 18 марта 2020

Я перевожу веб-API на ASP. NET ядро ​​2.2, но у меня возникают проблемы при моделировании данных массива привязки, передаваемых через строки запроса в запросах GET. В старом коде веб-API jquery запросы в основном просто работали, но теперь они этого не делают. Предположим, у нас есть простой API опроса для сервера чата в качестве примера:

public class PollChat
{
    public Guid ChatId { get; set; }
    public int MessageId { get; set; }
}

//... in controller
[HttpGet]
[Route("api/Poll")]
public async Task<ActionResult> Poll([FromQuery] PollChat[] chats)
{
    return new JsonResult(await chatServer.Poll(chats));
}

Простая функция jquery для вызова этого:

function poll(id, msgId) {
    var data = { chats: [{ chatId: id, messageId: msgId }] };
    $.get(opt.pollUrl, data, display); //'display' renders the messages
}

Однако на стороне сервера ' Параметр чатов пуст. Полученная на стороне сервера декодированная строка запроса:

?chats[0][chatId]=4b766187-f058-4d9e-8236-0b078657fa10&chats[0][messageId]=0

Учитывая правила привязки модели , возможно, строка запроса должна выглядеть примерно так:

?chats[0].chatId=4b766187-f058-4d9e-8236-0b078657fa10&chats[0].messageId=0

Это работает, когда я жестко кодирую этот URL-адрес запроса, но как я могу получить такое же поведение сериализации объекта, используя jquery, чтобы мне не пришлось вручную создавать URL-адрес? Альтернативно, есть ли способ для ядра ASP. NET принять формат сериализации jquery?

Я пробовал несколько ревизий исходного API, и это похоже на привязку модели строки запроса и jquery просто больше не работают вместе, поэтому я просто пытаюсь найти решение, которое сокращает мои усилия по переносу, не слишком меняя API.

1 Ответ

0 голосов
/ 01 апреля 2020

После долгих поисков я в итоге наткнулся на следующий пост , который должен работать достаточно хорошо. Похоже, что форматы привязки модели для ядра. NET значительно изменились, и поэтому они больше не совместимы с jquery соглашениями.

...