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

  1. 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.

  2. 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.

  3. 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!