MVC1004 : Renommer le paramètre lié au modèle

Value
Identificateur de la règle MVC1004
Le correctif est cassant ou non cassant Rupture

Cause

Un paramètre lié au modèle porte le même nom que l'une de ses propriétés.

Description de la règle

La liaison de modèle d'un paramètre complexe avec une propriété portant le même nom peut entraîner un comportement de liaison inattendu. Envisagez de renommer le paramètre ou d'utiliser un attribut de liaison pour spécifier un nom différent.

Prenez le code suivant :

public class HomeController : Controller
{
    public IActionResult Get(SearchModel search)
    {
        ...
    }
}

public class SearcModel
{
    public string Search { get; set; }
}

Dans ce modèle, le paramètre et sa propriété sont tous deux nommés Search, ce qui entraîne la liaison de modèle qui tente de lier la propriété en tant que search.Search. Le fait de nommer un paramètre et sa propriété de la même façon empêche la liaison à une valeur sans préfixe tel qu’une requête qui ressemble à ?search=MySearchTerm.

Comment corriger les violations

  • Renommez le paramètre si son préfixe n’est pas utilisé pendant la liaison :
public IActionResult Get(SearchModel model)
{
    ...
}

Renommer un paramètre d'un type public peut être considéré comme un changement radical puisqu'il modifie la surface de l'API publique d'une bibliothèque.

  • Si cela pose problème, envisagez d'utiliser un attribut de liaison de modèle tel que Bind pour spécifier le préfixe de liaison de modèle :
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Quand supprimer les avertissements

Les avertissements peuvent être supprimés si vous avez l'intention d'utiliser le nom du paramètre comme préfixe lors de la liaison du modèle.