MVC1004: Umbenennen des modellgebundenen Parameters

Wert
Regel-ID MVC1004
Fix führt oder führt nicht zur Unterbrechung Breaking

Ursache

Ein modellgebundener Parameter hat den gleichen 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.

Betrachten Sie folgenden Code:

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

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

In diesem Modell haben der Parameter und seine Eigenschaft den Namen Search, was dazu führt, dass die Modellbindung versucht, die Eigenschaft als search.Search zu binden. Wenn Sie einen Parameter und seine Eigenschaft gleich benennen, wird die Bindung an einen Wert ohne Präfix verhindert, z. B. eine Abfrage, die wie ?search=MySearchTerm folgt aussieht.

Behandeln von Verstößen

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

Das Umbenennen eines Parameters für einen öffentlichen Typ kann als Breaking Change angesehen werden, da dadurch die öffentliche API-Oberfläche einer Bibliothek geändert wird.

  • Wenn dies problematisch ist, sollten Sie ein Modellbindungsattribut verwenden, z. B. Bind zum Angeben des Modellbindungspräfixes:
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.