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

何时禁止显示警告

如果打算在模型绑定过程中使用参数名称作为前缀,则可以禁止显示警告。