Поделиться через


MVC1004. Переименование связанного параметра модели

Ценность
Идентификатор правила 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)
{
    ...
}

Когда следует подавлять предупреждения

Предупреждения можно отключить, если вы планируете использовать имя параметра в качестве префикса во время привязки модели.