Dela via


MVC1004: Byt namn på modellbunden parameter

Värde
Regel-ID MVC1004
Korrigeringen är antingen brytande eller icke-brytande Senaste nytt

Orsak

En modellbunden parameter har samma namn som en av dess egenskaper.

Regelbeskrivning

Modellbindning av en komplex parameter med en egenskap som har samma namn kan resultera i oväntat bindningsbeteende. Överväg att byta namn på parametern eller använda ett bindningsattribut för att ange ett annat namn.

Överväg följande kod:

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

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

I den här modellen får både parametern och dess egenskap namnet Search, vilket resulterar i att modellbindningen försöker binda egenskapen som search.Search. Att namnge en parameter och dess egenskap på samma sätt förhindrar bindning till ett värde utan prefix, till exempel en fråga som ser ut som ?search=MySearchTerm.

Så här åtgärdar du överträdelser

  • Byt namn på parametern om dess prefix inte används under bindningen:
public IActionResult Get(SearchModel model)
{
    ...
}

Att byta namn på en parameter i en publik typ kan betraktas som en ej bakåtkompatibel ändring eftersom det ändrar ett biblioteks publika API-gränssnitt.

  • Om detta är problematiskt bör du överväga att använda ett modellbindningsattribut, till exempel Bind för att ange modellbindningsprefixet:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

När du ska ignorera varningar

Varningar kan ignoreras om du tänker använda parameternamnet som ett prefix under modellbindningen.