| 价值 | |
|---|---|
| 规则 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)
{
...
}
何时禁止显示警告
如果要在模型绑定期间将参数名称用作前缀,则可以禁止显示警告。