Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Waarde | |
|---|---|
| Regel-id | MVC1004 |
| De oplossing veroorzaakt brekende of niet-brekende problemen | Breaking nieuws |
Oorzaak
Een modelgebonden parameter heeft dezelfde naam als een van de eigenschappen.
Beschrijving van regel
Modelbinding van een complexe parameter met een eigenschap met dezelfde naam kan leiden tot onverwacht bindingsgedrag. U kunt de naam van de parameter wijzigen of een bindingskenmerk gebruiken om een andere naam op te geven.
Houd rekening met de volgende code:
public class HomeController : Controller
{
public IActionResult Get(SearchModel search)
{
...
}
}
public class SearcModel
{
public string Search { get; set; }
}
In dit model zijn de parameter en de eigenschap beide benoemd Search, wat resulteert in modelbinding die probeert de eigenschap te binden als search.Search. Als u een parameter en de eigenschap ervan dezelfde naam geeft, zou dit kunnen voorkomen dat een binding met een waarde zonder voorvoegsel gebruikt wordt, zoals een query die eruitziet als ?search=MySearchTerm.
Hoe schendingen op te lossen
- Wijzig de naam van de parameter als het voorvoegsel niet wordt gebruikt tijdens de binding:
public IActionResult Get(SearchModel model)
{
...
}
Het hernoemen van een parameter van een publiek type kan worden beschouwd als een brekende verandering omdat het het openbare API-oppervlak van een bibliotheek wijzigt.
- Als dit problematisch is, kunt u overwegen een modelbindingskenmerk te gebruiken, zoals
Bind, om het voorvoegsel van de modelbinding op te geven.
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
...
}
Wanneer waarschuwingen onderdrukken
Waarschuwingen kunnen worden onderdrukt als u de parameternaam wilt gebruiken als voorvoegsel tijdens modelbinding.