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)
{
    ...
}

何时禁止显示警告

如果要在模型绑定期间将参数名称用作前缀,则可以禁止显示警告。