Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| Ценность | |
|---|---|
| Идентификатор правила | 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)
{
...
}
Когда следует подавлять предупреждения
Предупреждения можно отключить, если вы планируете использовать имя параметра в качестве префикса во время привязки модели.
ASP.NET Core