ASP.NET MVC如何用特性实现[FromForm]与不同属性名Record的映射?
ASP.NET Core中[FromForm]绑定非规范表单参数的解决方案
在ASP.NET Core的表单绑定场景中,当外部提交的参数名与你的模型属性名不一致时,无需修改自身属性名,只需通过[BindProperty]特性指定对应表单参数名即可。针对record类型的主构造函数参数,需要使用特性目标语法将特性应用到自动生成的属性上。
具体实现代码
假设外部数据源提交的表单参数名为weird_external_field,你的record模型可以这样定义:
public record ExampleModel([property: BindProperty(Name = "weird_external_field")] string MyProperty);
原理说明
[BindProperty(Name = "xxx")]:明确告诉MVC表单绑定系统,将名称为xxx的表单参数值映射到当前属性上。[property: ...]:因为record的主构造函数参数会自动生成对应的公共属性,这个语法是把特性直接应用到生成的属性上,而非主构造函数的参数本身。
配置完成后,你的POST端点无需修改,依然可以正常接收并完成映射:
[HttpPost] public ActionResult MyExample([FromForm] ExampleModel formModel) { // 直接使用formModel.MyProperty即可获取外部提交的对应参数值 return Ok(); }
内容的提问来源于stack exchange,提问作者Motta
相关产品推荐
相关产品推荐

