Aracılığıyla paylaş


Rota Kısıtlaması Oluşturma (C#)

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.

Yeni Proje iletişim kutusu

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