为什么使用Ajax将参数传递给ASP.NET Core中的控制器始终为NULL?

问题描述 投票:0回答:3

它可以工作,但是传递的参数始终为null,该代码在ASP.NET Framework(.Net Framework)上的其他项目中起作用,但在ASP.NET Core中不起作用。

var inputParams = "{namex: '" + 'testdata' + "'}";

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: inputParams,
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

测试控制器包含:

   [HttpPost]
   public JsonResult MyFunction(string namex) <--- namex is always NULL
    {
        return Json(false);
    }
c# asp.net-core parameter-passing asp.net-ajax
3个回答
0
投票

将FromBodyAttribute添加到参数

MyFunction([FromBody]字符串namex)


0
投票

没有以正确的格式发送数据,以便内容正确绑定到操作

首先正确构造要发布的有效负载

var inputParams = { namex: "testdata" }; //<-- NOTE JavaScript

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(inputParams), //<-- NOTE CONVERSION TO JSON
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

下一步创建一个模型以将数据保存在服务器端

public class MyModel {
    public string namex { get; set;}
}

最后重构操作以绑定到请求正文中的预期数据

[HttpPost]
public IActionResult MyFunction([FromBody]MyModel model) {
    if(ModelState.IsValid) {
        string namex = model.namex;
        return Ok();
    }
    return BadRequest(ModelState);
}

参考Model Binding in ASP.NET Core


0
投票

仅发送而没有对象

var inputParams = 'testdata';

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: inputParams,
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});



var xhr = $.ajax({
    url: "/Test/MyFunction?namex=testdata", // <------ here
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});
© www.soinside.com 2019 - 2024. All rights reserved.