ASP.NET MVC 5’de Attribute Routing

Selamlar;

ASP.NET MVC’de Routing aslında URI ile action’ın eşleştirilmesinden başka birşey değildir. Mvc 5 ile yeni bir routing tanımlama sistemi gelmiştir. Adı da attribute routing dir. Hem tanımlaması daha kolay, hem de daha detaylı bir tanımlama ortamı sağlamaktadır.

ASP.NET MVC önceki versiyonlarında routing RouteConfig.cs altında aşağıdaki gibi tanımlanırdı.

Yeni sistemde routing şu an detayına bakmadan aşağıdaki gibi kolaylıkla tanımlanabilir.

Öncelikle Attribute Routing’in kullanılabilmesi için RegisterRoutes altında MapMvcAttributeRoutes()’un aşağıdaki gibi tanımlanması gerekmektedir:

Route Tanımlama: Aşağıda Index() action’ının route’u aşağıda “books” olarak, Index(string title) action’ı “books/{title}” olarak ve Detail(string title) action’ı “books/{title}/detail” olarak tanımlanmıştır.

Route Prefix:  Kök yolun belirlendiği attribute’dur. Böylece aşağıda görüldüğü gibi Actionlar’da ana route’un, örneğin books’un belirtilmesine gerek yoktur.

Ayrıca istenir ise RoutePrefix “~” işareti ile Action tarafında ezilebilir. Aşağıdaki örnekte “reviews” kök route’u Index() action’ı için ezilerek “books” yapılmıştır.

RouteDefault

Optional Uri ve Default Değer Atama: Aşağıda görüldüğü gibi parametre yanına “?” konarak route parametrelerinin null değer alabilmesi sağlanmaktadır.

Yine aşağıda görüldüğü gibi route parametresine herhangi bir değer gelmediğinde default belirlenen bir değer kolaylıkla atanabilmektedir.

Default Route: Aşağıda görüldüğü gibi RoutePrefix ile kök route “reviews” olarak belirlenmiştir. Route attribute değeri olarak da “action=Index” yazılarak default gidilecek action “Index” olarak belirtilmiştir.

Route Constraint: Genel yazım şekli {parameter:constraint} dir. Amaç route’da alınacak parametreye bir takım kurallar tanımlamaktır. Örneğin aşağıda ilkin Index() methodu sayısal ‘id’ değer bekliyen bir action {id:int} iken ikinci tanımlanan Index() string ‘name’ bekleyen {name} bir  action’dır.

Örneğin aşağıda Index() action’ı için beklenen sayısal id değeri en küçük “1” olacak şekilde {id:int:min(1)} bir kural tanımlanmıştır.

Örneğin aşağıda Index() action’ının string parametresi maxlength(5) olarak atanmıştır. Yani maximum karakter sayısı 5 dir. Aynı zamanda nullable bir parametredir. “/books/test” örneğinde “test” 5 karakterden küçük olduğu için kural sağlanmıştır. Aynı şekilde “books/deneme_yazısı” örneğinde “deneme_yazısı” 5 karakterden büyük olduğu için kural sağlanmamıştır. Son olarak “/books/” örneğinde paramtere boş değer alabildiği için kural sağlanmıştır.

Alttaki Route Constraint listesi msdn.com’dan alınmıştır.

RouteConstraint

Custom Route Constraint: Bazen duruma göre özel kurallar yazılması gerekebilir. İşte bu durumda Custom Route Constraintler devreye girer. Aşağıdaki örnekte kabul edilebilecek bir isim listesi alınacak. Bunun dışında gelen isimler kabul edilmeyecek. Bunun için öncelikle AllowListConstraint class’ı oluşturulur. Constructor ‘ında izin verilecek string liste “|” işareti ile ayrılarak atanır. Match() methodu ile ilgili izin verilen liste gezilerek gelen değerin bu listede olup olmadığına bakılarak bool bir değer dönülür.

İlgili RouteConstraint RouteConfig classında aşağıdaki gibi tanımlanır.

Aşağıdaki örnekte Index() action’ı aldığı name parametresine “bora|duru” tanımlaması ile sadece “bora ve duru” isimlerine izin verilmiştir. Yani “books/bora” veya “books/duru” haricinde bu action’a erişilemez.

Route Name: Aşağıdaki örnekte de görüldüğü gibi route’a isim verilerek Uri’ye view’da erişim kolaylaşmıştır.

Areas: Bir controller’ı  [RouteArea] attribute’ü ile bir guruba atayabiliriz. Böylece AreaRegistration classdan ilgili area kolaylıkla kaldırılabilir. Ayrıca Controllerlar bir guruba atanmış olur. Aşağıdaki örnekde Index()’e erişim “/library/reviews/books/5” şeklinde yapılmaktadır.

Aşağıdaki link tıklandığında “library/reviews/detail” şeklinde bir url’e gitmektedir. Burada “library” yukarıda tanımladığımız area’yı temsil etmektedir.

Böylece ASP.NET MVC 5’de route işlemlerinde neler yapabileceğimizi gördük. Bize sağladığı kolaylıkları ve faydaları mümkün olduğunca incelemeye çalıştık.

Yeni bir makalede görüşmek üzere hepinize hoşçakalın.

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir