C# 使用post方法将多个参数发送到asp.net core 3 mvc操作
使用http post方法将具有多个参数的ajax请求发送到asp.net mvc core 3操作时出现问题。参数不绑定。在.net框架asp.net web api中也有类似的限制,但在asp.net mvc操作中没有。 我想知道asp.net core 3 mvc中是否有解决此问题的方法,或者这是新的限制? 行动:C# 使用post方法将多个参数发送到asp.net core 3 mvc操作,c#,asp.net-mvc,asp.net-core-mvc,asp.net-core-3.0,C#,Asp.net Mvc,Asp.net Core Mvc,Asp.net Core 3.0,使用http post方法将具有多个参数的ajax请求发送到asp.net mvc core 3操作时出现问题。参数不绑定。在.net框架asp.net web api中也有类似的限制,但在asp.net mvc操作中没有。 我想知道asp.net core 3 mvc中是否有解决此问题的方法,或者这是新的限制? 行动: 尝试在控制器签名中添加[FromBody]属性 public string SomeAction([FromBody] string param1, IEnumerable&l
尝试在控制器签名中添加
[FromBody]
属性
public string SomeAction([FromBody] string param1, IEnumerable<SomeType> param2, IEnumerable<SomeType> param3)
{
//param1 and param2 and param3 are null
}
公共字符串SomeAction([FromBody]字符串参数1、IEnumerable参数2、IEnumerable参数3)
{
//param1、param2和param3为空
}
对于新版本,操作需要明确说明希望从何处绑定模型
创建一个模式来保存所有必需的数据
public class SomeActionModel {
public string param1 { get; set; }
public IEnumerable<SomeType> param2 { get; set; }
public IEnumerable<SomeType> param3 { get; set; }
}
参考中描述了单个
[FromBody]
参数的原因。请求主体可能存储在只能读取一次的非缓冲流中
使用自定义模型活页夹,您可以绕过它。请参阅。是否有任何错误?没有。仅获取空参数扫描您使用对象包装参数并尝试使用[FromBody]属性?如果可能,将所有
参数
放在一个模型类中@Ma core是对以前版本的完全重写。MVC5+中的一些功能在新版本中得到了改进,而不是JSON。JSON的字面意思是“对象表示法”,所以您需要将它绑定到一个对象,而不是一堆不同的参数。您可以通过x-www-form-urlencoded
发送,并将其绑定到多个参数,因为它只是键值对。在有复杂对象的地方使用FromBody属性。当我们试图告诉mvc请求的数据在请求体中时。但是这里您指定的函数参数只是简单类型而不是复杂对象,即使它看起来不像复杂对象,第二个和第三个参数是IEnumerable
SomeType
可能是也可能不是复杂类型,在querystring中使用时,Enumerable
很容易导致[一个巨大的querystring&一些问题]()。
public string SomeAction([FromBody] string param1, IEnumerable<SomeType> param2, IEnumerable<SomeType> param3)
{
//param1 and param2 and param3 are null
}
public class SomeActionModel {
public string param1 { get; set; }
public IEnumerable<SomeType> param2 { get; set; }
public IEnumerable<SomeType> param3 { get; set; }
}
public IActionResult SomeAction([FromBody] SomeActionModel model) {
if(ModelState.IsValid) {
string param1 = model.param1;
IEnumerable<SomeType> param2 = model.param2;
IEnumerable<SomeType> param3 = model.param3;
//...
return Ok();
}
return BadRequest(ModelState);
}
var model = {
param1: GeometricNetworkTrace_Class.flags,
param2: GeometricNetworkTrace_Class.barriers,
param3: feederIds
};
$.ajax({
contentType: 'application/json',
data: JSON.stringify(model),
type: "POST",
dataType: "json",
url: "/controllerName/actionName",
success: function (result) {
},
error: function (error) {
console.error(error);
}
});