Teilen über


MVC1004: Modell-gebundenen Parameter umbenennen

Wert
Regel-ID MVC1004
Korrektur ist blockierend oder nicht-blockierend Breaking

Ursache

Ein gebundener Modellparameter hat denselben Namen wie eine seiner Eigenschaften.

Regelbeschreibung

Die Modellbindung eines komplexen Parameters mit einer Eigenschaft mit demselben Namen kann zu unerwartetem Bindungsverhalten führen. Erwägen Sie, den Parameter umzubenennen oder ein Bindungsattribut zu verwenden, um einen anderen Namen anzugeben.

Beachten Sie den folgenden Code:

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

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

In diesem Modell sind der Parameter und seine Eigenschaft beide benannt Search, was dazu führt, dass die Modellbindung versucht, die Eigenschaft als search.Searchzu binden. Das Benennen eines Parameters und seiner Eigenschaft mit demselben Namen verhindert die Bindung an einen Wert ohne ein erforderliches Präfix, wie z. B. in einer Abfrage, die wie ?search=MySearchTerm aussieht.

Wie man Verstöße behebt

  • Benennen Sie den Parameter um, wenn das Präfix während der Bindung nicht verwendet wird:
public IActionResult Get(SearchModel model)
{
    ...
}

Die Umbenennung eines Parameters für einen öffentlichen Typ könnte als eine bahnbrechende Änderung angesehen werden, da sie die öffentliche API-Oberfläche einer Bibliothek ändert.

  • Wenn dies problematisch ist, sollten Sie ein Modellbindungsattribut wie Bind verwenden, um das Modellbindungspräfix anzugeben.
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Wann sollten Warnungen unterdrückt werden?

Warnungen können unterdrückt werden, wenn Sie den Parameternamen während der Modellbindung als Präfix verwenden möchten.