Url Nasıl Kısaltılır

Selamlar;

Bugün aynı indiryada Google URL Shortener‘da olduğu gibi Url kısaltan bir web uygulaması yazacağız. Tabi bunu tamamen benim fikir ve hayal gücüme göre yapacağız. İzlediğim yola alternatif fikri olanlar lütfen paylaşmaktan çekinmesin.

Öncelikle kısaltılacak Url’in tutulacağı “Urls” tablosunu aşağıdaki gibi oluşturalım. Database’imizin adı da ShortUrl olsun. Arama işlemi ShortUrl’e göre yapıldığı için Primary Index ShortUrl’dir.

tblUrl

Solution’a bir DAL projesi eklenip, var olan Database üzerinden CodeFirst ile ilgili Poco ve DbContext nesneleri aşağıdaki gibi yaratılır.

Şimdi sıra geldi bir Mvc projesi yaratıp girilicek uzun url’i kısaltıp database’e kaydetmeye.

Öncelikle HomeController.cs’e aşağıdaki action yazılır:

RouteConfig.cs aşağıdaki gibi değiştirilir: Amaç sayfaya url girilmeden ilk gelindiğinde default olarak “Shorter” view’ına gelinmesidir.

Shorter

Shorter.cshtml: “shortenerInputText” input alanına kısaltılması istenen uzun “Url” girilir. “URL Kısalt” buttonuna basılınca “shorUrl()” function’ı ilgili kısaltılacak Url’i alıp “/Home/ShortUrl” action’ına post eder.

Öncelikle [A-Z] ve [0-9]  arasından random seçilecek 8 karakter nasıl oluşturulur onu inceleyelim.

Aşağıda GetRandomUrl() methodu belirtilen karakterler arasında Linq sayesinde “Enumerable.Repeat()” kullanarak random 8 karakter seçmektedir.

“ShortUrl()” methodu aşağıda görüldüğü gibi “GetRandomUrl()” methodu ile shortUrl üretilir. Eğer önceden böyle bir url üretilmiş ise “While()” döngüsü içinde unique bir url çekilene kadar işlem tekrarlanır. Daha sonra short url ve uzun olan gerçek url Database’e kaydedilir.

screen

Şimdi sıra geldi girilen kısa Url’i istenen gerçek url’e yönlendirmesine:

Öncelikle RouteConfig.cs’e aşağıdaki “RedirectLink” yolu eklenir.

Web.config dosyasına aşağıdaki “customErrors” tagı eklenir. Amaç örneğin “http://localhost:7461/xb84w3r8” şeklinde sayfaya gelindiğinde böyle bir route’a uyan kural olmadığı için hata sayfasına düşmesidir. Böylece RedirectLink action’ında gelen shortUrl’i “Request[“aspxerrorpath”]” parametresinden çekilerek alınır. Daha sonra bu shortUtl’e ait gerçek Url’i, Database’den çekilerek(301) permanent Redirect edilir ve sayfaya yönlendirilir. (301) redirect ile kalıcı bir aktarma yapılarak arama botlarının sayfa sayımında, gerçekte yönlendirilen sayfanın sayması sağlanır. Örnek olarak “http://localhost:7461/xb84w3r8” değil de gerçekte yönlendirilen “http://borakasmer.com” arama botlarınca sayfa gösterimi sayılmış olunur.

Web.config:

HomeController/RedirectLink:

Böylece geldik bir makalenin daha sonuna yeni bir makalede görüşmek üzere hoşçakalın.

Source:

 

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

9 Cevaplar

  1. çağrı dedi ki:

    elinize sağlık .

  2. teja dedi ki:

    can you please share work file please

  3. Hamit dedi ki:

    Eline sağlık hocam, çok işimize yaradı. google kapatmış bu hizmetini, diğerleride ücretli oluyor çünkü biz bu mantığı sms atarken kullanacağımız için diğer firmalarda kısıtlama filan koymuş 1000 kısa link sonrası ücretli diye(üstelik 30$ ortlama aylık)

    • borsoft dedi ki:

      Teşekkürler Hamit,
      İşine yaramasına çok sevindim. Ben de zamanında baya kullandım bunu :)

      • Hamit dedi ki:

        Hocam, uzun zamandır kullanıyoruz iş biraz büyüdü :) gelen istek sayıları artınca web servisde(asp.net mvc api) şöyle bir sorun çıkmaya başladı;
        >web servise gelen istek saniyede 100-150 civarında. Bu isteği yapan bir windows servis.
        >kayıtlar database üzerinde çiftlemeye başladı hatta aynı kayıtdan 3 tane bile atıyor. Bu senaryonun önüne nasıl geçebilirim. procedure yazdım içine kontroller ekledim nasıl oluyorsa üretilen kısa kod bile aynı oluyor. sanırım asenkron yapı ile ilgili bilmediğim kaçırdığım bir durum var. Hangi konuyu araştırmalıyım kaçırdığım nokte ne olabilir. Teşekkürler.

        • Hamit dedi ki:

          Ek bilgi > isteği yapan windows servis, her saniye datasında kayıt varmı diye kontrol edip varsa bu kayıtları URL kısaltma işlemi yaptığım api’ye yolluyor api cevap döndüğünde kayıtlarını güncelliyor. Api daha cevap veremeden servis sonraki saniye ye geçmiş oluyor ve yine istek yapıyor.
          Burda bazı kayıtlar cevap alamadan tekrar ikinci saniyeye geçiyor. İşte burada bişeyler oluyor :D

  4. Erkan kule dedi ki:

    Hamit kardeşim kısa url alanına unique index ekle,
    Db ye yazan kısımda exeception kontrolü yap hata alırsan baştan oluştursun yani bu işlemi Db ye yazana kadar döndüren bir döngüde yapın…Db yazması ile loop dan çıksın…Boracım çok zaman oldu görüşelim…

çağrı için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak.