【发布时间】:2020-03-06 13:05:17
【问题描述】:
给定一个模型:
public class MyModel
{
public MyModel()
{
}
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
还有一个控制器动作:
public async Task<IActionResult> MyAction(MyModel myModel) {}
如何实现模型绑定行为以使 this 正确绑定:
www.host.blah/page?MyModel.Prop1=a&MyModel.Prop2=b
而且 this 不绑定(没有前缀):
www.host.blah/page?Prop1=a&Prop2=b
我不确定正确的术语,但从Model Binding in ASP.NET Core判断:
对于复杂类型的每个属性,模型绑定都会通过 名称模式 prefix.property_name 的来源。如果什么都没有 找到后,它只查找不带前缀的 property_name。
但我想避免没有前缀的默认回退。
如果它完全相关,我正在尝试实现这一点,因为有问题的控制器可以嵌入到其他控制器/页面中,作为 UI 中的子选项卡,所以我无法控制哪些其他查询字符串参数将在那个时候存在。
【问题讨论】:
-
为什么不使用 POST 并避免查询字符串?
-
@MladenB。你为什么关心那种类型的幂等性?为什么要在资源模型中公开消息细节?如果您决定重命名该类型,是否也应该破坏 HTTP API?
-
can be embedded in other controllers/pages,这不是控制器的工作方式。控制器不仅仅是类或模块,它们指定 API。它们也不是页面,views 是页面。 -
@PanagiotisKanavos,我很欣赏这种关注,但感觉谈话与问题有所不同,这使得其他人很难集中注意力。我会尝试回答,但请尽量专注于最初的问题,因为那是我需要帮助的地方。重命名不是问题,因为这可以通过简单地使用
nameof来解决。代码已经这样写了,我没有时间重构整个应用程序,只是为了能够解决绑定问题......
标签: c# asp.net asp.net-core model-binding