ASP.NET Core Захват данных POST - PullRequest
       4

ASP.NET Core Захват данных POST

0 голосов
/ 13 декабря 2018

У меня есть интерфейс карты Openlayer, где я фиксирую добавление новых точек на карту.Я хочу взять эти точки данных о местоположении и сохранить их в базе данных.Итак, у меня есть рабочая функция на странице .cshtml, которая выглядит следующим образом:

map.on('dblclick', function (evt) {

    var coordinate = evt.coordinate;


    var datapoints = new Array();
    var features = source.getFeatures();
    for (var i = 0; i < features.length; i++) {
        var poi = features[i];
        var datapt = new Object();
        datapt.X = poi.values_.geometry.flatCoordinates[0];
        datapt.Y = poi.values_.geometry.flatCoordinates[1];

        datapoints.push(datapt);
    }
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "Draw_Features", true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify(datapoints));

});

Это, кажется, работает нормально и отправляет обратно закодированный JSON из всех местоположений.В моем файле контроллера у меня есть следующее:

    [HttpGet]
    public IActionResult Draw_Features()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Draw_Features(string someValue)
    {
        //TODO
        return View("Index");
    }

    [HttpPost]
    public IActionResult AddPointsToDB(string someValue)
    {
        //TODO
        return View("Index");
    }

У меня есть две проблемы:

1) Я хочу вернуть данные в функцию AddPointsToDB (), но вместо этоговместо этого перейдем к «Draw_Features ()».Как указать в xhr.send () правильную функцию посадки?

2) Я ожидал, что функция получит JSON через переменную 'string someValue'.Но эта переменная имеет значение NULL.Как правильно получить доступ к этому JSON из функции?

Спасибо!

РЕДАКТИРОВАТЬ: Исправлен код преобразования JSON, который подвергался бомбардировке.Все те же вопросы ...

РЕДАКТИРОВАТЬ 2: Отображение данных POST из Chrome

https://i.stack.imgur.com/6u33r.png

1 Ответ

0 голосов
/ 14 декабря 2018

Для рабочей демонстрации выполните следующие шаги:

  1. Определите новую модель для получения данных вместо строкового ввода.Для передачи datapoints в действие контроллера он будет сериализован и десериализирован встроенной функцией MVC.

    public class Coordinate
    {
        public double X { get; set; }
        public double Y { get; set; }
    }
    
  2. Измените действие с помощью [FromBody]IList<Coordinate> coordinates, которое будет указывать привязку модели для чтения модели из тела.

    public IActionResult AddPointsToDB([FromBody]IList<Coordinate> coordinates)
    {
        //TODO
        return View("Index");
    }
    
  3. Как уже указывалось, убедитесь, что вы установили xhr.open("POST", "AddPointsToDB", true); с нужным названием действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...