Yaygın ASP.NET MVC Yönlendirme Hatasını Anlamak
Geliştiriciler, ASP.NET MVC ile çalışırken sıklıkla çeşitli sorunlarla karşılaşırlar; bunlardan biri de sinir bozucu şu mesajdır: “No route in the route table matches the supplied values.” Bu hata genellikle yönlendirme yapılandırması ile sağlanan değerler arasında bir uyumsuzluk olduğunu gösterir. Bu blog yazısında, bu hatayla ilgili belirli bir senaryoyu inceleyeceğiz ve bunu etkili bir şekilde nasıl giderebileceğimizi tartışacağız.
Sorun: Yönlendirme Uyuşmazlığı Hatası
Bizim durumumuzda, bir geliştirici RedirectToRoute
yöntemini kullanarak bir isteği yönlendirmeye çalıştı ancak bir hata ile karşılaştı. Global.asax
dosyasındaki yönlendirme yapılandırması aşağıdaki gibi tasarlandı:
routes.MapRoute(
"Super-SuperRoute", // Yönlendirme adı
"Super.mvc/SuperRoute/{year}", // Parametreli URL
new { controller = "Super", action = "SuperRoute", id = "RouteTopic" } // Parametre varsayılanları
);
Yönlendirme yöntemini çağırdığında:
return this.RedirectToRoute("Super-SuperRoute", new { year = selectedYear });
veya daha ayrıntılı bir formda:
return this.RedirectToRoute("Super-SuperRoute", new { controller = "Super", action = "SuperRoute", id = "RouteTopic", year = selectedYear });
geliştirici, kötü haberi veren yönlendirme hatası ile karşılaştı.
Hatanın Çözümü
Dikkate Alınması Gereken Ana Noktalar
-
Yönlendirme Tanımı: Tanımlanan yönlendirmenin, ulaşmaya çalıştığınız URL’nin yapısıyla tam olarak eşleştiğinden emin olun. Bizim durumumuzda, yönlendirmenin bir
year
parametresi gerektirdiğini belirtmek önemlidir. -
Parametre Eşleşmesi: Yönlendirme ile birlikte geçirilen parametrelerin, yönlendirme tanımı ile hem adlandırma hem de tür açısından eşleşmesi gerekmektedir.
-
Değişken Değeri Kontrolü: Genellikle göz ardı edilen bir sorun, geçirilen değişkenlerin değerlerindedir; özellikle bu değerler
null
veya beklenmeyen bir türde olabileceğinde.
Suçlu: selectedYear
Değeri Null
Araştırma yapıldığında, geliştirici selectedYear
değişkeninin türünün var
olduğunu ve nihayetinde null
olduğunu keşfetti. Bu, yönlendirme için geçerli bir değer gerektiren yönlendirme eşleşmesinin başarısız olmasına doğrudan yol açmaktadır.
Çözüm: Yönlendirme Parametresini Düzeltme
Adım 1: Değişken Türlerini Kontrol Edin ve Dönüştürün
selectedYear
değişkeninin türü ve değeri, yönlendirme yapılmadan önce doğru olmalıdır. Bunu sağlamanın yolu:
- Tür Doğrulama: Öncelikle,
selectedYear
’ın beklenen türünü belirleyin. Örneğin, bir tamsayı olması gerekiyorsa,null
olmadığından emin olun.
if (selectedYear == null)
{
// Null durumunu uygun şekilde ele alın
}
else
{
// Gerekirse uygun bir türe dönüştürün
int year = int.Parse(selectedYear.ToString());
}
Adım 2: Yönlendirin
Bir kez selectedYear
değişkeni geçerli bir değere sahip olduğunda, yönlendirmeyi gerçekleştirin:
return this.RedirectToRoute("Super-SuperRoute", new { year = year });
Son Düşünceler
ASP.NET MVC’de yönlendirme sorunları ile karşılaştığınızda, her zaman aşağıdakileri kontrol edin:
- Yönlendirme tanımının yönlendirme parametreleriyle eşleştiğinden emin olun.
- Null değer sorunlarını önlemek için değişken türlerini doğrulayın ve dönüştürün.
- Hata ayıklama sırasında değişkenlerin durumunu izlemek için durak noktalarını kullanın.
Bu noktalara dikkat ederek, yönlendirme hatalarıyla karşılaşma olasılığınızı önemli ölçüde azaltabilir ve daha pürüzsüz bir geliştirme süreci yaşayabilirsiniz. İyi kodlamalar!