MVC1004:重命名模型绑定参数
值 | |
---|---|
规则 ID | MVC1004 |
修复是中断修复还是非中断修复 | 重大 |
原因
模型绑定参数与其属性之一具有相同的名称。
规则说明
模型将复杂参数与具有相同名称的属性绑定,这可能会导致意外的绑定行为。 考虑重命名参数,或使用绑定属性来指定不同的名称。
考虑下列代码:
public class HomeController : Controller
{
public IActionResult Get(SearchModel search)
{
...
}
}
public class SearcModel
{
public string Search { get; set; }
}
在此模型中,参数及其属性都命名为 Search
,这导致模型绑定尝试将属性绑定为 search.Search
。 将参数及其属性命名为相同的名称,可防止绑定到没有前缀的值,例如类似于 ?search=MySearchTerm
的查询。
如何解决冲突
- 如果在绑定过程中未使用参数前缀,则重命名该参数:
public IActionResult Get(SearchModel model)
{
...
}
重命名公共类型上的参数可能会被视为一项中断性变更,因为它更改了库的公共 API 图面。
- 如果存在相关问题,请考虑使用模型绑定属性(例如
Bind
)来指定模型绑定前缀:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
...
}
何时禁止显示警告
如果打算在模型绑定过程中使用参数名称作为前缀,则可以禁止显示警告。