如何解决对复杂对象使用[FromQuery]
当我在传递查询字符串时向API端点发送请求时,我的参数没有绑定的问题,如果我扁平化“提交”,则参数绑定,但这不是我想要的解决方案。当第三方控件处理请求时,我无法提供发送请求的客户端代码。
我提供了与请求一起发送的查询字符串的示例,该示例在开发人员工具中可以看到,但是Person和Property返回为null。有没有人有任何建议,特别是我可以用来绑定此复杂对象的服务器端更改?谢谢。
public class Submission {
public Person Person {get; set; }
public Property Property { get; set; }
}
public class Person {
public int Age { get; set; }
}
public class Property {
public string Address { get; set; }
}
Query string parameters
'Person[Age]': 18
'Property[Address]': test
[HttpGet("action")]
public async Task<IActionResult> Submit([FromQuery] Submission model)
{
}
解决方法
在这种情况下,您要调用的URL是:
https://localhost:.../.../action?Person.Age=18&Property.Address=test
,
更改操作:
private void Setup()
{
var personViews = personRepository.GetAll().Select( p => new PersonViewModel( p ) ).ToList();
var bl = new BindingList<PersonViewModel>( personViews );
bl.AllowEdit = true;
bl.AllowNew = true;
bl.AllowRemove = true;
bl.RaiseListChangedEvents = true;
this.AutoValidate = AutoValidate.EnableAllowFocusChange;
dataGridViewPersons.AllowUserToAddRows = true;
dataGridViewPersons.AllowUserToDeleteRows = true;
dataGridViewPersons.AllowUserToOrderColumns = true;
dataGridViewPersons.AllowUserToResizeColumns = true;
dataGridViewPersons.AllowUserToResizeRows = true;
dataGridViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewPersons.CausesValidation = true;
dataGridViewPersons.AutoGenerateColumns = true;
dataGridViewPersons.DataSource = new BindingSource( bl,null );
if( dataGridViewPersons.Columns[ nameof( PersonViewModel.Age ) ] is DataGridViewTextBoxColumn numberColumn )
{
numberColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
//numberColumn.DefaultCellStyle.Format = "N0"; // Integer with 0 decimal places
//numberColumn.DefaultCellStyle.NullValue = 13;
//numberColumn.DefaultCellStyle.DataSourceNullValue = 14;
numberColumn.ValueType = typeof( int );
}
else
{
throw new Exception();
}
dataGridViewPersons.CellValueChanged += ( s,e ) => {
var dgv = dataGridViewPersons;
var row = dgv.Rows[ e.RowIndex ];
var cell = dgv[ e.ColumnIndex,e.RowIndex ];
if( dgv.CurrentRow.Index == dgv.Columns[ nameof( PersonViewModel.Age ) ].Index )
{
}
};
dataGridViewPersons.Validating += ( s,e ) => {
;
};
dataGridViewPersons.CellValidating += ( s,e.RowIndex ];
if( dgv.CurrentRow.Index == dgv.Columns[ nameof( PersonViewModel.Age ) ].Index )
{
}
};
dataGridViewPersons.CellEndEdit += ( s,e.RowIndex ];
if( e.ColumnIndex == dgv.Columns[ nameof( PersonViewModel.Age ) ].Index )
{
}
};
dataGridViewPersons.CellFormatting += ( s,e.RowIndex ];
if( e.ColumnIndex == dgv.Columns[ nameof( PersonViewModel.Age ) ].Index )
{
if( cell.Value is string str && str.Any( x => !char.IsNumber( x ) ) )
{
}
}
};
}
为您的提交模型尝试此操作
[HttpGet("Submit")]
public async Task<IActionResult> Submit([FromQuery] Submission model)
{
}
在这种情况下,您必须调用以下URL:
https:// localhost:... / ... / submit?Age = 18&Address = myaddress
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。