Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Stephen Walther
Bu öğreticide Stephen Walther, normal ifadelerle yol kısıtlamaları oluşturarak tarayıcı isteklerinin yolları nasıl eşleştirebileceğini nasıl denetleyebileceğinizi gösterir.
Belirli bir yolla eşleşen tarayıcı isteklerini kısıtlamak için yol kısıtlamalarını kullanırsınız. Rota kısıtlaması belirtmek için normal bir ifade kullanabilirsiniz.
Örneğin, Global.asax dosyanızdaki Listeleme 1'de yolu tanımlamış olduğunuzu düşünün.
Listeleme 1 - Global.asax.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"}
);
Liste 1, Product adlı bir yol içerir. Tarayıcı isteklerini Liste 2'deki ProductController ile eşlemek için Product yolunu kullanabilirsiniz.
Liste 2 - Controllers\ProductController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
public ActionResult Details(int productId)
{
return View();
}
}
}
Ürün denetleyicisi tarafından kullanıma sunulan Details() eyleminin productId adlı tek bir parametreyi kabul ettiğini göreceksiniz. Bu parametre bir tamsayı parametresidir.
Liste 1'de tanımlanan yol aşağıdaki URL'lerden herhangi biriyle eşleşecektir:
- /Product/23
- /Product/7
Ne yazık ki, yol aşağıdaki URL'ler ile de eşleşecektir:
- /Product/blah
- /Product/apple
Details() eylemi bir integer parametresi beklediğinden, tamsayı değerinden başka bir şey içeren bir istekte bulunmak hataya neden olur. Örneğin, tarayıcınıza /Product/apple URL'sini yazarsanız Şekil 1'deki hata sayfasını alırsınız.
Şekil 01: Bir sayfanın patladığını görme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Asıl yapmak istediğiniz, yalnızca düzgün bir tamsayı productId içeren URL'leri eşleştirmektir. Rotayla eşleşen URL'leri kısıtlamak için bir yol tanımlarken kısıtlama kullanabilirsiniz. Liste 3'teki değiştirilmiş Ürün yolu, yalnızca tamsayılarla eşleşen normal bir ifade kısıtlaması içerir.
Listeleme 3 - Global.asax.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {productId = @"\d+" }
);
\d+ normal ifadesi bir veya daha fazla tamsayıyla eşleşir. Bu kısıtlama, Ürün yolunun aşağıdaki URL'ler ile eşleşmesine neden olur:
- /Product/3
- /Product/8999
Ancak aşağıdaki URL'ler kullanılamaz:
/Product/apple
/Ürün
Bu tarayıcı istekleri başka bir yol tarafından işlenir veya eşleşen yol yoksa Kaynak bulunamadı hatası döndürülür.