ASP.NET Core捕获POST数据

时间:2018-12-13 07:45:26

标签: asp.net-mvc asp.net-core

我有一个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。在我的Controller文件中,我有以下内容:

    [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)我期望函数通过'string someValue'变量接收JSON。但是该变量为NULL。从函数内部访问JSON的正确方法是什么?

谢谢!

编辑:修复了遭到轰炸的JSON转换代码。还是同样的问题...

编辑2:显示来自Chrome的POST数据

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

1 个答案:

答案 0 :(得分:0)

有关有效的演示,请按照以下步骤操作:

  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);设置为所需的动作名称。