lostyazilim
tr.link

Asp.Net querystring çekilen veri boşsa sunucu Hatası YARDIM

22 Mesajlar 4.129 Okunma
acebozum
tr.link

yunusemrealtay yunusemrealtay WM Aracı Kullanıcı
  • Üyelik 22.02.2016
  • Yaş/Cinsiyet 35 / E
  • Meslek Web Master
  • Konum İstanbul Avrupa
  • Ad Soyad Y** A**
  • Mesajlar 11
  • Beğeniler 3 / 1
  • Ticaret 0, (%0)
Öncelikle herkese merhaba
Acil yardımlarınıza ihtiyacım var sorunu bir türlü çözemedim. Farklı yöntemler denedim ama sağlıklı bir sonuca ulaşamadım.

Sorunuma gelirsek öncelikle şöyle belirteyim

http://localhost/sayfa.aspx?id=2

Parametresi ile verim düzgün bir şekilde geliyor sorun yok veri tabanım 60 yakın id'im dolu ve hepsini düzgün bir şekilde açıyor.

http://localhost/sayfa.aspx?id=3
http://localhost/sayfa.aspx?id=4
http://localhost/sayfa.aspx?id=5
http://localhost/sayfa.aspx?id=6
http://localhost/sayfa.aspx?id=7

Falan gidiyor ve sorun yok. Sorunum şu veri tabanım da 60 kadar dolu olan verinin dışında yazılan başka bir veri girildiğinde Sunucu HTTP 404 Hatası verdirme.

http://localhost/sayfa.aspx?id=61
http://localhost/sayfa.aspx?id=62
http://localhost/sayfa.aspx?id=63

Falan şekilde id'den sonra ne yazarsam yazayım boş sayfa yerine hata sayfası göstersin.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;

public partial class sayfa : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection baglanti = new OleDbConnection();
baglanti.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~\\App_Data\\veri.accdb"));

baglanti.Open();
if (Request.QueryString["id"] != null)
{
int sayi = Int16.Parse(Request.QueryString["id"].ToString());
OleDbCommand sorgu = new OleDbCommand();
sorgu.CommandText = ("Select * from sayfa Where id=" + sayi);
sorgu.Connection = baglanti;
OleDbDataReader oku;
oku = sorgu.ExecuteReader();
while (oku.Read())
{
Baslik.Text = oku["baslik"].ToString();
Icerik.Text = oku["icerik"].ToString();
}
}
baglanti.Close();
}
}


Veri çekme metodum.

Şimdiden ilginiz için teşekkür ederim.
 

 

elektronikssl
webimgo

balporsugu balporsugu WM Aracı Kullanıcı
  • Üyelik 26.08.2014
  • Yaş/Cinsiyet 38 / E
  • Meslek Bilgisayar Mühendisi
  • Konum Ankara
  • Ad Soyad E** E**
  • Mesajlar 509
  • Beğeniler 85 / 84
  • Ticaret 3, (%67)
baglanti.open();dan sonra
bir if daha at
if(convert.toint16(Request.QueryString["id"])>60||convert.toint16(Request.QueryString["id"])<0)
response.redirect(hata.aspx);
bu arada kullandığın sql querysi için bence geç olmadan linq ya geç çok daha kolay olur senin için.iki saat bağlantı açıp kapatmakla uğraşmazsın sql injectionlardanda uzak kalırsın
Nogitsun

kişi bu mesajı beğendi.

ontedi ontedi www.ontedi.com Kullanıcı
  • Üyelik 03.10.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Yazılım Uzmanı, Matematikçi
  • Konum Ankara
  • Ad Soyad S** T**
  • Mesajlar 1118
  • Beğeniler 325 / 324
  • Ticaret 2, (%100)

public bool fnSayisal_Mi(string parVeri)
{
bool blnDonen_Deger = false;
if (string.IsNullOrEmpty(parVeri) == true)
{
blnDonen_Deger = false;
}
else
{
Regex desen = new Regex("^[0-9]*$");
blnDonen_Deger = desen.IsMatch(parVeri);
}
return blnDonen_Deger;
}


string strId = Request.QueryString["id"];
if (fn.fnSayisal_Mi(strIletisim_ID) == false)
{
Response.Write("Lürfen geçerli bir değer giriniz")
}
else
{

OleDbConnection baglanti = new OleDbConnection();
baglanti.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~\\App_Data\\veri.accdb"));

baglanti.Open();
OleDbCommand sorgu = new OleDbCommand();
sorgu.CommandText = ("Select * from sayfa Where id=" + strId);
sorgu.Connection = baglanti;
OleDbDataReader oku;
oku = sorgu.ExecuteReader();
if (oku.HasRows)
{
while (oku.Read())
{
Baslik.Text = oku["baslik"].ToString();
Icerik.Text = oku["icerik"].ToString();
}
}
baglanti.Close();

}
 

 

www.ontedi.com
www.cizgi.site

ytre10 ytre10 Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 23.01.2015
  • Yaş/Cinsiyet 44 / E
  • Meslek CTO
  • Konum İstanbul Anadolu
  • Ad Soyad H** B**
  • Mesajlar 163
  • Beğeniler 17 / 30
  • Ticaret 12, (%100)
selam,

yukarıda ki örneklerin çoğunda kulagı neden tersten tuttunuz, daha fazla satır kod yazmak için mi :)
Ontedi fnSayisal_Mi metodun yerine integer tryparse metodunu neden kullanmayıp kocaman if else li metodlara gerek duydun ki.

ikinci olarak, gelen değer boşssa neden cn tanımlayıp bunu open yapıyorsunuz?

üçüncü olarak bodozlama baglanti.open, baglanti.close yazarsanız cn açık ise tekrar açmaya çalısırsanız proje patlar, cn nin durumunu kontrol edip bunu open close yapmayı deneyin.

dördüncü olarak Int16.Parse(Request.QueryString["id"].ToString()) metodunu kullanırsanız query stringten adam aaa vs gibi string bir değer girerse projenizi patlatır. bu kısımlarda int.tryparse metodlarını kullanabilirsiniz.

beşinci olarak bu derece patlamaya müsait kod yazan birisi olarak try cacht finaly bloklarını kullanmanızı tavsiye ederim.
 

 

wmaraci
wmaraci

ontedi ontedi www.ontedi.com Kullanıcı
  • Üyelik 03.10.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Yazılım Uzmanı, Matematikçi
  • Konum Ankara
  • Ad Soyad S** T**
  • Mesajlar 1118
  • Beğeniler 325 / 324
  • Ticaret 2, (%100)
Hocam arkadaşın işi görülsün diye eldeki kütüphaneden kod paylaştım.


Önerin için yine de teşekkürler. Ben açıkcası regex kullanma taraftarıyım.
 

 

www.ontedi.com
www.cizgi.site

ozgurgezen ozgurgezen WM Aracı Kullanıcı
  • Üyelik 17.03.2016
  • Yaş/Cinsiyet 43 / E
  • Meslek Bilgisayar Muhendisi
  • Konum İstanbul Anadolu
  • Ad Soyad Ö** H**
  • Mesajlar 702
  • Beğeniler 224 / 225
  • Ticaret 16, (%100)
ontedi, yaklasimin guzel, olmasi gereken de bu.
her yeni sayi tanimini tryparse ile kontrol etmek yerine fnSayisal_Mi fonksiyonunu cagirarak yordamsal programlama biciminde yaklasmissin. yazdigin programlarin gunu kurtarma amaclari gostermedigi asikar, bakim maliyetleri de uzun vadede daha dusuk olacaktir.
 

 

yunusemrealtay yunusemrealtay WM Aracı Kullanıcı
  • Üyelik 22.02.2016
  • Yaş/Cinsiyet 35 / E
  • Meslek Web Master
  • Konum İstanbul Avrupa
  • Ad Soyad Y** A**
  • Mesajlar 11
  • Beğeniler 3 / 1
  • Ticaret 0, (%0)
Değerli cevaplarınız için teşekkür ederim dediğiniz yöntemleri denemeye çalıştım. Şöyle bir sorum olacak kusuruma bakmayın. Örneğin wordpress, opencart gibi sistemlerin de veri tabanında sayfa olmadığında o sayfa 404 uyarı vermesi gibi bir yöntemi nasıl gerçekleştirebiliriz.

Örnek:

http://localhost:5055/sayfa.aspx?id=222

gibi bir bir url yazdığımızda karşımıza HTTP 404 uyarı karşılaması bunu nasıl yapabiliriz.

Şunu da belirteyim ASP.NET C# da yeniyim bir takım önerilerde bulunmuşsunuz tekrar teşekkür ederim hemen hemen projemin tüm fonksiyonları gerek MVC gerek C# kodlaryla olsun bir şekilde tamamlandı son aşama url yapısı kaldı bu konuyu da sizlerin yardımıyla hal edersem sorunum kalmıyor.

İlginiz teşekkür ederim.
 

 

ozgurgezen ozgurgezen WM Aracı Kullanıcı
  • Üyelik 17.03.2016
  • Yaş/Cinsiyet 43 / E
  • Meslek Bilgisayar Muhendisi
  • Konum İstanbul Anadolu
  • Ad Soyad Ö** H**
  • Mesajlar 702
  • Beğeniler 224 / 225
  • Ticaret 16, (%100)
if (fn.fnSayisal_Mi(strIletisim_ID) == false)
{
Session["nebulunmadi"] = strIletisim_ID;
Response.Redirect("404.aspx",true);
}
 

 

yunusemrealtay yunusemrealtay WM Aracı Kullanıcı
  • Üyelik 22.02.2016
  • Yaş/Cinsiyet 35 / E
  • Meslek Web Master
  • Konum İstanbul Avrupa
  • Ad Soyad Y** A**
  • Mesajlar 11
  • Beğeniler 3 / 1
  • Ticaret 0, (%0)
Hocam çok teşekkür ederim dediğiniz kodları denedim sorunsuz çalışıyor. Aslında size sormak istediğim id boş ise server hatasası olan 404 uyarısı almak.



Yukarıdaki gibi.

Aslında senaryo kişi urlye gittiğinde veri tabanın da kontrolü yapılacak eğer id boşsa direk server hatası 404 uyarı ile karşılaşıcak.

ASP.NET olan çoğu sitede bu şekilde sitelerle karşılaşıyorum ama nasıl yapıldığı hakkında ne kadar arama yapsam da sonuç bulamadım.

Tekrar teşekkür ederim.
 

 

VoyL VoyL WM Aracı Kullanıcı
  • Üyelik 17.03.2013
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğrenci
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** Ç**
  • Mesajlar 133
  • Beğeniler 0 / 23
  • Ticaret 0, (%0)
querystring boşsa böyle bir hata almazsın hocam. başka bir sorunun var bence. debug yapmayı denedin mi?
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al