Ověřují se metody TryParse a BindAsync.
ASP.NET Core teď ověřuje TryParse
a BindAsync
metody u typů parametrů pro Map*
metody. Pokud nebyla nalezena žádná platná metoda, ASP.NET Core hledá neplatné metody a vyvolá výjimku při spuštění, pokud je nalezena. Výjimka pomáhá vyhnout se neočekávanému chování tím, že vás upozorní, že podpis metody může být nesprávný.
Zavedená verze
ASP.NET Core 6.0 RC 2
Předchozí chování
V předchozích verzích ASP.NET Core 6, pokud TryParse
má nebo BindAsync
metoda neplatný podpis, nebyla vyvolána žádná výjimka a architektura se pokusila vytvořit vazbu JSON z těla.
// Todo.TryParse is not in a valid format.
// Will try to bind from body as JSON instead.
app.MapPost("/endpoint", (Todo todo) => todo.Item);
public class Todo
{
public string Item { get; set; }
public static bool TryParse(string value) => true;
}
Nové chování
Pokud ASP.NET Core najde veřejnou TryParse
metodu nebo BindAsync
metodu, která neodpovídá očekávané syntaxi, vyvolá se při spuštění výjimka. Předchozí příklad vytvoří chybu podobnou této:
TryParse method found on Todo with incorrect format. Must be a static method with format
bool TryParse(string, IFormatProvider, out Todo)
bool TryParse(string, out Todo)
but found
Boolean TryParse(System.String)
Typ zásadní změny
Tato změna může mít vliv na kompatibilitu binárních souborů a kompatibilitu zdroje.
Důvod změny
Tato změna byla provedena tak, aby vývojáři věděli BindAsync
o metodách, TryParse
které mají neplatný formát. Dříve by se architektura vrátila k předpokladu, že parametr je z těla JSON. Tento předpoklad může vést k neočekávanému chování.
Doporučená akce
Pokud má váš typ nebo TryParse
metodu s jinou BindAsync
syntaxí z jiného důvodu než vazby parametrů, dojde při spuštění k výjimce. Abyste se tomuto chování vyhnuli, je k dispozici několik strategií:
- Změňte svoji
BindAsync
neboTryParse
metodu tak, aby bylainternal
neboprivate
. - Přidejte novou
BindAsync
metodu neboTryParse
metodu, která má syntaxi, kterou architektura hledá – neplatné metody se ignorují, pokud se najde platný. - Označte parametr jako
[FromBody]
.
Ovlivněná rozhraní API
RequestDelegateFactory.Create()
- Všechny
IEndpointRouteBuilder.Map*()
metody, napříkladapp.MapGet()
aapp.MapPost()
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro