ASP.NET Core 5/UrlHelper

Action metoduDüzenle

Verilen controller ve action'a ait URL'i oluşturur. Örnek:

string url = Url.Action("Index","Home",new { id = 5 });

Yukarıdaki url değişkeninin tuttuğu değer /Home/Index/5 olacaktır. Yani üretilen URL domain'i içermemektedir. Ayrıca controller ve action dışındaki parametreler anonim tip nesnesi üretimi yoluyla verilmektedir. Üretilen URL Startup.cs dosyasındaki rota tanımlamasıyla uyumlu olacaktır.

ActionLink metoduDüzenle

Kullanımı Action() metoduyla aynıdır. Tek farkı tam URL'yi üretmesidir. Örnek:

string url = Url.ActionLink("Index","Home",new { id = 5 });

Benim bilgisayarımda burada üretilen URL http://localhost:5000/Home/Index/5 olmaktadır. Kuşkusuz projenizi bir sunucuya yüklediğinizde gerçek URL üretilecektir.

RouteUrl metoduDüzenle

Aktif olan talep için belirli bir rota şablonuna uygun URL oluşturur. Örnek:

string url = Url.UrlRoute("Default");

Örneğin bu talep Home controller'ının içindeki Index action'ını tetiklemişse ve ekstra olarak id için 5 parametresi verilmişse üretilen URL /Home/Index/5 olacaktır. Diğer metotlar belirtiğimiz URL'i döndürürken bu metot aktif URL'le işlem yapar.

ActionContext özelliğiDüzenle

Aktif URL'e ait bilgi alabildiğimiz özelliktir. Örnek:

@{
    var url = Url.ActionContext.RouteData.Values;
}
Controller: @url["controller"] <br />
Action: @url["action"] <br />
Id: @url["id"]

Url.ActionContext.RouteData.Values bir sözlük döndürür. Bu sözlüğün her bir ögesi bir KeyValuePair'dır. İstersek foreach döngüsü ile bu sözlük üzerinde dönerek her bir anahtar-değer çiftini ayrı ayrı da elde edebiliriz. Kuşkusuz bir URL'deki parametreleri her zaman ezbere bilemeyebiliriz. Bütün parametrelerin parametre ismiyle birlikte bir anahtar-değer çifti kümesinde tutulması, istediğimiz zaman bu kümedeki tek bir parametreyi almak işimizi çok kolaylaştırcaktır. İstersek bir parametrenin URL'de olup olmadığını şöyle anlayabiliriz:

@{
	var url = Url.ActionContext.RouteData.Values;
	if(url.ContainsKey("id"))
	{
		<text>Id parametresi var.</text>
	}
	else
	{
		<text>Id parametresi yok.</text>
	}
}