Asp.Net HTTPModule ve HTTPHandler

ASP.NET iş akış süreci, gelen bütün isteklerin ASP.NET tarafından iş akışı üzerinde bulunan birimlere (module) iletilmesiyle başlar. Her birim gelen isteği aldıktan ve istek üzerindeki tüm yetkiyi elde ettikten sonra, en uygun hale gelinceye kadar istek üzerinde işlem yapar. İstek bütün HTTPModule yapılarından geçtikten sonra ilgili HTTPHandler’a iletilir. HTTPHandler istek üzerinde bazı işlemler yaptıktan sonra, isteğe verilen cevap ASP.NET iş akışında isteğin geldiği HTTPModule yapıları aracılığıyla iletilir.

ASP.NET Runtime tarafından gelen isteklerde birden fazla HTTPModule kullanılmasının sebebi, Web uygulamalarında kullanılan Cache (ara belleğe alma), Session (kullanıcı tarafından oluşturulan oturum), Authentication (kimlik doğrulama) nesnelerinin her biri için farklı bir HTTPModule kullanılıyor olmasıdır. HTTPHandler ise HTTPModule yapılarından gelen bilgileri kullanarak uygun html çıktısını üreterek aynı HTTPModule yapıları üzerinden ASP.NET Runtime’a iletilir.

Daha detaylı anlatım için URL;

http://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/08/httpmodule-ve-httphandler

Reklamlar

Js küçük notlar

JavaScript numbers
Büyük ve küçük sayılar bilisimsel veya üstsel gösterimle yazılabilir.

  var x = 1453e5;   // 145300000
  var y = 1453e-5;  // 0.01453
  alert(y);

JavaScript sayı veri türünde 15 haneli ondalıksız sayı yazılabilir.

  var x = 999999999999999;   // 999999999999999
  var y = 9999999999999999;  // 10000000000000000
  alert(y);

JavaScript sayı veri türünde 17 haneli ondalıklı sayı yazılabilir.

Ancak kayan nokta aritmetiği 100% doğru değildir.

  var x = 0.2 + 0.1;   // 0.30000000000000004
  alert(x);

  //Bu sorunu çözmek için aşağıdaki yöntem kullanılabilir.
  var x = (0.2 * 10  + 0.1 * 10) / 10;   // 0.3
  alert(x);

Sayıları onaltılık, sekizlik ve ikilik sayı sistemine dönüştürmek için toString() fonksiyonu kullanılır.

  var x = 1453;
  alert(x.toString(16)); // 5ad
  alert(x.toString(8));  // 2655
  alert(x.toString(2));  // 10110101101

Javascript Infinity
JavaScript ile sonsuzluk-sınır değerini ifade etmek için Infinity veya -Infinity anahtar kelimesi kullanılır.

Aşağıdaki örnek JavaScript ile yazılabilen sayı sınır değerine kadar çarpma işlemi yapacaktır.

  var x = 2;
  while(x != Infinity) {
    x = x * x;
    alert(x);
  }

Bir sayının 0’a bölünmesi Infinity veya –Infinity değeri döndürür.

  var x = 10 / 0;   // Infinity
  var y = -10 / 0;  // -Infinity

JavaScript Infinity anahtar kelimesinin veri türü sayıdır.

alert(typeof Infinity);

JavaScript NaN – Not a Number
JavaScript ile bir değişkenin sayı olup olmadığını NaN anahtar kelimesiyle öğrenebiliriz.
Sayısal bir değer sayısal olmayan bir değerle işlem yapılırsa JavaScript NaN sonucunu verir.

alert(100 / "Yusuf");

Metin veri türü içindeki değer sayı olursa sonuç sayı değeri olacaktır.

alert(100 / "10");

Değişkenin sayı olup olmadığını bulmak için isNaN() fonksiyonu kullanılır.

  var x = 100 / "Yusuf";
  alert(isNaN(x));

JavaScript NaN anahtar kelimesini veri türü sayıdır.

alert(typeof NaN);

JavaScript tarih nesnesinden yıl, ay, gün, saat, dakika .vb tarih bilgisini almak için çeşitli fonksiyonlar vardır.

Fonksiyon Açıklaması
getDate() Ayın gününü verir (1-31)
getDay() Haftanın gününü verir (0-6)
getFullYear() Yılı dört basamak olarak verir (yyyy)
getHours() Saati bilgisini verir (0-23)
getMilliseconds() Milisayine bilgisini verir (0-999)
getMinutes() Dakika bilgisin verir (0-59)
getMonth() Ay bilgisini verir (0-11)
getSeconds() Saniye bilgisini verir (0-59)
getTime() Tarihi 1 Ocak , 1970’dan itibaren milisaniye olarak verir

JavaScript getDay() fonksiyonu haftanın kaçıncı gün (0-6) olduğu bilgisini verir.

  var tarih = new Date();
  alert(tarih.getDay());

JavaScript haftanın ilk gününü Pazar kabul eder.
Haftanın günlerini bir diziye atarak getDay() fonksiyonu ile haftanın gün ismini alabiliriz.

  var tarih = new Date();
  var gunler = ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"];
  alert(gunler[tarih.getDay()]);

JavaScript tarih ayarlamak

Fonksiyon Açıklama
setDate() Ayın gününü ayarlar (1-31)
setFullYear() Yılı ayarlar (ay ve gün isteğe bağlı eklenebilir)
setHours() Saat bilgisini ayarlar (0-23)
setMilliseconds() Milisaniye bilgisini ayarlar (0-999)
setMinutes() Dakika bilgisin ayarlar (0-59)
setMonth() Ay bilgisini ayarlar (0-11)
setSeconds() Saniye bilgisin ayarlar (0-59)
setTime() Tarihi 1 Ocak , 1970’dan itibaren milisaniye olarak ayarlar

JavaScript setFullYear kullanımı
JavaScript setFullYear() fonksiyonu yılı ayarlar. Örnekte tarih 25 mart 2001 olarak ayarlanmıştır.

  var tarih = new Date();
  tarih.setFullYear(2001, 2, 25);
  alert(tarih);

JavaScript tarihe gün eklemek
JavaScript setDate() fonksiyonu ile tarihe gün ekleme işlemini yapabiliriz. Örnekte tarihe 15 gün eklenmiştir.

  var tarih = new Date();
  tarih.setDate(tarih.getDate() + 15);
  alert(tarih);

Veya instanceof operatörü ile değişken türünü karşılaştırabiliriz.

  var liste = ["Elma", "Armut", "Portakal"];
  alert(liste instanceof Array);

async/await ES7 – Javascript

ES6’da yield’ı asenkron işleri bekletmek için kullanabiliyorduk. ES7’de bu iş için await keywordu bulunmaktadır.
Hemen örneğimize geçelim, console slm yazdırıp daha sonra 3sn bekletip by yazdıran methodlarımızı aşağıdaki gibi yazabiliriz.

Not: ES7 tüm browserlar desteklememektedir özellikle Explorer.

function bekle3sn(){
	return new Promise(function(resolve){
		setTimeout(resolve, 3000);
	})
}

async function SelamveBy(){
	console.log("slm");
	await bekle10sn();
	console.log("by");
}

SelamveBy();

Promiseler basitçe 4 parçadan oluşmaktadır.

  1. Öncelikle bir new Promise diyerek yeni bir promise yaratılır.
  2. Bu Promise ya Resolve edilir ve işlem tamamlanır yada Reject edilir.
  3. Daha sonra bu Promise’i kullanırken .then fonksiyonu içinde Resolve ve Reject durumlarını handle eden 2 fonksiyon verilir.
  4. Eğer herhangi bir exception throw edilirse, .catch fonksiyonu ile yakalanıp handle edilebilir.
  5. En önemlisi bir Promise geriye bir Promise return edebilir, buna Promise Chaining denir.
//Genel Kullanım
var p1 = new Promise( (resolve, reject) => {  
  resolve('Success!');
  // or
  // reject ("Error!");
} );

p1.then( value => {  
  console.log(value); // Success!
}, reason => {
  console.log(reason); // Error!
} );

REST Apilerde Dönülen HTTP Status Kodları (Yaygın Kullanılanlar)

HTTP statuslarını gruplayacak olursak;
Bilgilendirme – 1xx
Başarılı İşlem – 2xx
Yönlendirmek – 3xx
Kullanıcı Taraflı hata – 4xx
Server Taraflı hata – 5xx

200 OK: Genelde veri listeleme sonuçları 200 ile dönüş yapılır.
201 CREATED: Veri eklendiği zaman verinin kendisi ile 201 dönülüyor.
204 NO CONTENT: Veri silindiği zaman 204 dönülüyor.
400 BAD REQUEST: Genel olarak kayıt ekleme ya da güncelleme isteklerinde gönderilen veri validasyondan geçemediyse neden geçemediği hakkında bilgiyle beraber 400 http statusuyla dönülür.
403 Forbidden: Yetkiye dayalı bir işlem yapılıyorsa bu api uç noktasında işlem yapmaya çalışan kişinin bu işlemi yapmaya yetkisi yoksa 403 status kodu döndürülür.
401 Unauthorized: Api ucunuzda bu işlemi yapmak için login olmak zorunlu ise ve apiye istek yapan kullanıcı login değil ise bu http status ile cevap verilir. Örneğin kullanıcının kendi bilgilerinin güncellemesi denilebilir.
404 Not Found: Bu http status  kullanıcının istek yaptığı url yok ise ya da url deki veri geçersiz ise bu hatayı alırız.
405 Method Not Allowed:
 Bu http status u istek yapılan api uç noktası gönderilen methodu implemente etmemiş ise bu http status unu alırız. Örneğin login olması için token verdiğimiz bir api ucumuz var ve bu uçta sadece post isteğini kabul ediyor. Kullanıcı bu api urline GET isteği yaparsa bu hatayı alır.

429 Too Many Requests: Bu http statusunu saatlik ya da dakikaklık kısıtlanan sınırdan fazla istek yaparsak bu http statusunu alırız.

JavaScript Use Strict neden kullanılır

JavaScript “use strict” kullanım amacı, kodun katı kurallı olarak çalıştırılacağını belirtir.

Katı kurallı kullanımda bir değişken oluşturulmadan kullanmaya izin vermez.

JavaScript kodlarının katı kurallı olarak yorumlanması için kod veya fonksiyon başına “use strict”; yazmak yeterli olacaktır.

Katı kural tanımı kod başına yazılırsa tüm kodlar katı kurallı olarak çalışacaktır.

"use strict";
a = 2;
b = 3;
c = a + b;
alert(c); // Değişken oluşturulmadan kullanıldığından hata verir.
m = 45;
alert(m);
hesapla();

function hesapla() {
"use strict";
a = 2;
b = 3;
c = a + b;
alert(c); // Değişken oluşturulmadan kullanıldığından hata verir.
}

Neden use strict
JavaScript katı kural tanımı “güvenli” kod yazmak için kullanılır.

Katı kural tanımı daha önceki hatalı kullanımın önüne geçer.

Örnek olarak JavaScript’te değişken adını yazarak bir değişken kullanabilirsiniz. Ancak katı kural tanımı ile değişken oluşturmadan değişken kullanmak hata verecektir.

JavaScript’te nesne özelliği yazılamaz olan özelliklere değer ataması yapıldığında hata vermeyecektir.

Katı kural tanımında yazılamaz olan bir özelliğe, yalnızca okunabilen bir özelliğe, olmayan bir özelliğe, olmayan bir değişkene ve olmayan bir nesneye yapılan atamalar hata verecektir.

Bazı kuralları;

*Değişken oluşturulmadan kullanmak hata verir.

*Değişken ve nesnenin silinmesine izin verilmez.

*Fonksiyon silinmesine izin verilmez.

*Fonksiyona aynı parametrenin iki defa yazılmasına izin verilmez(a(a1, a1)).

*Kaçış karakterlerine izin verilmez.

*Sadece okunabilir bir özelliğe değer atamaya izin verilmez.

*Sadece değer döndüren özelliğe değer atamaya izin verilmez.

*Silinemez bir özelliğin silinmesine izin verilmez.

*Değişken ismi olarak “eval” kullanılmasına izin verilmez.

*Değişken ismi olarak “arguments” kullanılmasına izin verilmez.

*JavaScript with kullanımına izin verilmez.

*JavaScript eval fonksiyonu ile oluşturulmuş değişkenlerin kullanımına izin verilmez.

Anahtar kelimelerin kullanımına izin vermez;

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

Javascript Console ekranın küçük karalamalar ;)

Console ekranına geçmek için F12 tuşunun kullanabilirsiniz.

String Interpolation – Console ekranında stilli uyarılar gösterme
%s: string ifadeler
%i: integer ifadeler
%c: custom ifadeler

console.todo = function(msg) {
console.log('%c %s %s %s', 'color: yellow; background-color: black;', '–', msg, '–');
}

console.important = function(msg) {
console.log('%c %s %s %s', 'color: brown; font - weight: bold; text-decoration: underline;', '–', msg, '–');
}

console.todo('This is something that’ s need to be fixed');
console.important("This is an important message");

Liste/Array gibi değerlerin console ekranında tablo olarak gösterilmesi

var animals = [
{ animal: 'Horse', name: 'Henry', age: 43 },
{ animal: 'Dog', name: 'Fred', age: 13 },
{ animal: 'Cat', name: 'Frodo', age: 18 }
];

console.table(animals);

Timer kullanarak js performansını bulma

console.time('Timer1');

var items = [];
for(var i = 0; i < 100000; i++){
items.push({index: i});
}

console.timeEnd('Timer1');

Console temizleme
Console.Clear();

JS .min dosyalarını Unminify olarak görme
ÖR: Chrome browser için F12 tuşu ile console açılır ve soruce sekmesinden her hangi bir min.js file açılır ve pretty print butonu ile kodu düzenli bir şekilde görüntüleyebilirsiniz.

SQL Join,Union,Except Nedir?

EXPECT: SQL’de EXCEPT ifadesini iki kümenin farklı elemanlarını getirmek için kullanırız. Sadece ilk sonuç setinde olup ikici sorgu sonucunda olmayan kayıtları listelememizi sağlamaktadır. Departman ve çalışanlar adında iki tablomuz olsun. Henüz bir departmana bağlı olmayan çalışanlar veya çalışanı olmayan departmanlar derken EXCEPT kullanabiliriz. Ya da sipariş ve müşteriler tablomuz olsun. Sipariş vermeyen müşterileri listelemek için de EXCEPT kullanabiliriz.

SELECT FilmStudioID FROM Studio
EXCEPT
SELECT FilmStudioID FROM film

EXCEPT’e alternatif olarak NOT IN’de kullanabiliriz. Aralarındaki fark; EXCEPT sonuçları DISTINCT getirirken, NOT IN tekrarlı/tekrarsız getirmektedir. Şimdi aynı örneği bir de NOT IN ile yazalım;

SELECT T1.StudioName, T1.FilmStudioID 
FROM Studio AS T1 
WHERE T1.FilmStudioID NOT IN
      (SELECT T2.FilmStudioID 
       FROM Film AS T2 
       WHERE T1.FilmStudioID=T2.FilmStudioID)

INTERSECT: SQL’de INTERSECT ifadesini iki kümenin ortak elemanlarını getirmek için kullanırız.

SELECT Sutun1, Sutun2...., SutunN FROM Tablo1
INTERSECT
SELECT Sutun1, Sutun2...., SutunN FROM Tablo2

UNION: 2 yada daha fazla SELECT ifadesini bağlar. JOIN ise iki ya da daha fazla tabloyu tek bir SELECT ile bağlar. Ayrıca UNION tablo satırlarını bağlar, JOIN ise tablo sütunlarını birleştirir.
SQL UNION/UNION ALL arasındaki fark nedir?
UNION: DISTINCT gibi davranır yani mükerrer(tekrar eden) kayıtlar gelmez.
UNION ALL: Mükerrer kayıt olup olmaması önemli değildir, tüm satırlar gelir.

Temelde üç tip JOIN vardır bunlar; CROSS JOIN, INNER JOIN ve OUTER JOIN (LEFT OUTER, RIGHT OUTER, FULL OUTER)‘dir.
CROSS JOIN: İki tablonun kartezyen çarpımıdır. Yani A tablosundaki her satır için B tablosundaki tüm satırlar döner.

--Önerilen syntax biçimi
SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1
 CROSS JOIN
     Tablo2
  
--Alternatif syntax biçimi
SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1, Tablo2

INNER JOIN: İki tablodaki ortak alana göre birebir eşleştirme yapar.

--Önerilen syntax biçimi
SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1
 INNER JOIN
     Tablo2 ON
   Tablo1.Ortak_Sütun = Tablo2.Ortak_Sütun

LEFT OUTER JOIN: İlk tablonun verileri koşulsuz gelir, ikinci tablodan ise ortak alana göre eşleşen kayıtlar gelir. Eşleşmeyen kayıtlar NULL döner.

--Önerilen syntax biçimi
SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1
 LEFT OUTER JOIN
     Tablo2 ON
   Tablo1.Ortak_Sütun = Tablo2.Ortak_Sütun

RIGHT OUTER JOIN: İkinci tablonun verileri koşulsuz gelir, ilk tablodan ise ortak alana göre eşleşen kayıtlar gelir. Eşleşmeyen kayıtlar NULL döner.

SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1
 RIGHT OUTER JOIN
     Tablo2 ON
   Tablo1.Ortak_Sütun = Tablo2.Ortak_Sütun

FULL OUTER JOIN: İki tablonun ortak alana göre eşleşen eşleşmeyen tüm kayıtları gelir. Eşleşmeyen kayıtlar NULL döner.

SELECT Tablo1.Sütun(lar), Tablo2.Sütun(lar),
FROM Tablo1
 FULL OUTER JOIN
     Tablo2 ON
   Tablo1.Ortak_Sütun = Tablo2.Ortak_Sütun