为什么在 ASP.NET Core 中将带 Ajax 的参数传递给控制器始终为 NULL?
Why passed param with Ajax to controller in ASP.NET Core is always 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);
}
将 FromBodyAttribute 添加到参数
MyFunction([FromBody] 字符串名称 x)
数据未以正确的格式发送,内容无法正确绑定到操作
先正确构造要发布的payload
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);
}
刚刚发送,没有对象
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) {
}
});
它有效,但传递的参数始终为空,此代码在 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);
}
将 FromBodyAttribute 添加到参数
MyFunction([FromBody] 字符串名称 x)
数据未以正确的格式发送,内容无法正确绑定到操作
先正确构造要发布的payload
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);
}
刚刚发送,没有对象
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) {
}
});