TryParse ve BindAsync yöntemleri doğrulandı
ASP.NET Core artık yöntemler için Map*
parametre türlerinde ve BindAsync
yöntemlerini doğrularTryParse
. Geçerli bir yöntem bulunamazsa, ASP.NET Core geçersiz yöntemleri arar ve bulunursa başlangıçta bir özel durum oluşturur. Özel durum, yöntem imzanızın yanlış olabileceği konusunda sizi uyararak beklenmeyen davranışları önlemeye yardımcı olur.
Sürüm kullanıma sunulmuştur
ASP.NET Core 6.0 RC 2
Önceki davranış
ASP.NET Core 6'nın önceki sürümlerinde, bir TryParse
veya BindAsync
yöntemi geçersiz imzaya sahipse özel durum oluşturmamış ve çerçeve JSON'ı gövdeden bağlamayı denemiştir.
// 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;
}
Yeni davranış
ASP.NET Core beklenen söz dizimine uymayan bir genel TryParse
veya BindAsync
yöntem bulursa, başlangıçta bir özel durum oluşturulur. Önceki örnek şuna benzer bir hata oluşturur:
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)
Hataya neden olan değişikliğin türü
Bu değişiklik ikili uyumluluğu ve kaynak uyumluluğunu etkileyebilir.
Değişiklik nedeni
Bu değişiklik, geliştiricilerin ve geçersiz biçime sahip yöntemlerin BindAsync
TryParse
farkında olması için yapılmıştır. Daha önce, çerçeve parametresinin gövdeden JSON olduğunu varsaymaya geri dönecekti. Bu varsayım beklenmeyen davranışlara neden olabilir.
Önerilen eylem
Türünüzün parametre bağlaması dışında bir nedenle farklı söz dizimine sahip BindAsync
bir veya TryParse
yöntemi varsa, şimdi başlangıçta bir özel durumla karşılaşırsınız. Bu davranışı önlemek için birden çok strateji kullanılabilir:
- veya yönteminizi
BindAsync
veyaTryParse
private
olarakinternal
değiştirin. - Çerçevenin aradığı söz dizimine sahip yeni
BindAsync
veyaTryParse
yöntem ekleyin; geçerli bir yöntem bulunursa geçersiz yöntemler yoksayılır. - Parametrenizi olarak
[FromBody]
işaretleyin.
Etkilenen API’ler
RequestDelegateFactory.Create()
- Tüm
IEndpointRouteBuilder.Map*()
yöntemler, örneğinapp.MapGet()
veapp.MapPost()
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin