ASP.NET’te GET Yerine POST ile Kullanıcıları Yönlendirme
ASP.NET’te formlar ile çalışırken, geliştiriciler genellikle bir zorlukla karşılaşır: form gönderimlerinden sonra kullanıcıları nasıl yönlendirebiliriz ve verileri GET
yerine POST
isteği ile gönderebiliriz. Bu sorun, bazı verileri kaydetmeniz gerektiğinde ve ardından kullanıcının dış bir sayfaya yönlendirilmesini sağlarken orijinal form verilerinin istekle birlikte gönderildiğinden emin olunması gerektiğinde ortaya çıkar. Bu zorluğun olası çözümlerine dalalım.
HTTP Yönlendirmelerini Anlamak
Bu yönlendirme sorununu anlamak için, HTTP yönlendirmelerinin nasıl çalıştığını gözden geçirmemiz gerekiyor. Tipik olarak, ASP.NET’te Response.Redirect()
çağrıldığında, sunucu tarayıcıya yeni bir URL’ye gitmesi için HTTP Durum Kodu 302 içeren bir yanıt gönderir. Ancak burada ana nokta, bu işlemin otomatik olarak POST
değil, GET
ile yeni bir istek oluşturmasıdır. Bu, göndermek istediğiniz verinin yönlendirmeye dahil edilmeyeceği anlamına gelir.
HTTP Durum Kodu 307 Kullanma
Bir alternatif, HTTP Durum Kodu 307‘yi kullanmaktır. 302’den farklı olarak, orijinal isteği GET
‘e çeviren 307 durum kodu, tarayıcıya istek yönteminin korunması gerektiğini bildirir. Uygulama şöyle bir şey görünümünde olacaktır:
public void PageLoad(object sender, EventArgs e)
{
// Tarafınızda gönderimi işleyin
Response.Status = "307 Geçici Yönlendirme";
Response.AddHeader("Location", "http://example.com/page/to/post.to");
}
Tarayıcı Davranışına Dair Önemli Not
Ancak, tüm tarayıcıların 307 yönlendirmelerini tutarlı bir şekilde işleyemediğini unutmamak önemlidir. Örneğin:
- Internet Explorer (IE), bir POST isteğini herhangi bir uyarı veya onay olmadan yönlendirme eğilimindedir.
- Safari, POST verilerini atılacak şekilde davranabilir ve bu da 307’yi 302’ye benzer bir işe dönüştürerek veri kaybına neden olabilir.
Bu tutarsızlıklardan ötürü sadece 307 durum kodlarına güvenmek tehlikeli olabilir.
JavaScript Kullanarak Çözümler
HTTP durum kodları, farklı tarayıcılar arasında öngörülemeyen davranışlara yol açacağından, en güvenilir yaklaşım JavaScript kullanmaktır. İşte uygulayabileceğiniz iki yöntem:
Seçenek 1: AJAX ile Form Oluşturma ve Gönderme
- Formu,
action
kısmı üçüncü taraf sunucuya işaret edecek şekilde oluşturun. - Gönderim düğmesine bir tıklama olay işleyici ekleyin ki:
- Gerekli verilerle sunucunuza bir AJAX isteği gönderin.
- Formun daha sonra üçüncü taraf sunucuya gönderilmesine izin verin.
Bu yöntem JavaScript gerektirir, bu da kullanıcıların devre dışı bırakması durumunda sorun çıkarabilir.
Seçenek 2: Gizli Bir Form ile Yönlendirme
- Formunuzu verileri sunucunuza gönderecek şekilde tasarlayın.
- Form gönderiminden sonra, tüm gerekli verilerin gizli girişler olarak kodlandığı başka bir form içeren bir sayfa gösterin ve “Yönlendiriliyor…” mesajı ekleyin.
- Bu formu üçüncü taraf sunucuya otomatik olarak göndermek için JavaScript kullanın.
Bu Yöntemi Neden Seçmelisiniz?
- Güvenilirlik: JavaScript’in etkin olmasına güvenmez, çünkü gerekirse kullanıcılara gönder düğmesini gösterebilirsiniz.
- Veri Üzerinde Kontrol: Dış sunucuya gönderilecek verileri kendiniz seçersiniz, böylece istenmeyen veri ifşasına karşı önlem almış olursunuz.
Sonuç
ASP.NET’te bir POST
isteğini yönlendirmek, tarayıcıların işleme sınırlamaları ve standart HTTP davranışları nedeniyle karmaşık bir durumdur. Ancak, gizli bir form oluşturmak veya AJAX kullanmak, yönlendirmeler sırasında verilerinizin doğru bir şekilde iletilmesini sağlamak için pratik çözümler sunar. Bu yöntemler, güvenilirliği artırmakla kalmaz, ayrıca dış sunuculara gönderilen veriler üzerinde daha büyük bir kontrol sağlar.
Bu teknikleri uygularken zorluklar yaşıyorsanız, ASP.NET geliştirme yolculuğunuzda yardım almak için bizimle iletişime geçmekten çekinmeyin!