PDA

View Full Version : مقاله: هندل کردن خطاها در asp.net



aserfg
شنبه 23 بهمن 1389, 17:25 عصر
عنوان مقاله : هندل کردن خطاها در asp.net
با سلام
تا حالا با سایتهایی برخورد داشتیم که به هرعلتی خطای موجود درسایت رو به ما به عنوان کاربر نشون میدن این موضوع جدا از اینکه نظر کاربر رو نسبت به اون سایت تغییر میده . از لحاظ امنیتی نیز ریسک پذیره و هکرها می تونن با درخواستهای متوالی اطلاعات زیادی رو نسبت به سایت به دست بیارن .

راه حل 1 :


ساده ترین راه حل قرار دادن تگ زیر در web.config است :


<customErrorsmode="On"defaultRedirect="error.htm">

</customErrors>

صفحه error.htm رو خودتون بسازین و یه پیغام مناسب رو داخلش قرار بدین .
مانند : کاربر گرامی در اجرای درخواست شما خطایی رخ داده ! لطفا مجددا سعی نمایید . یا هر چیز دیگه..
در این حالت می تونید تخصصی تر برخورد کرده وپردازش خطاها رو سفارشی کنید :


<customErrorsmode="On"defaultRedirect="error.htm">

<errorstatusCode="404"redirect="FileNotFound.htm" />

<errorstatusCode="403"redirect="NoAccess.htm" />

</customErrors>

که در صورت بروز خطای 404 به صفحه FileNotFound.htm و خطای 403 NoAccess.htm

راه حل 2:

روش قبلی ساده ترین راه حله ولی ما می خوایم یه فایل log.txt داشته باشیم که هر خطایی رخ داد در این فایل ثبت بشه و مدیر سایت بتونه اونا رو ببینه و اقدامات پیشگیرانه رو اتخاذ کنه. به نظر این راه حل مناسبتره!
خوب صفحه error.htm رو بسازید و پیغام مناسب رو درونش قرار بدین . در فایل global.asax رویدادی هست به عنوانApplication_Error که در صورت بروز هر خطایی در پروژه صدا زده می شه . ما از این نکته استفاده می کنیم و کدهای زیر رو درونش قرار می دیم :

string filename=Server.MapPath(".")+"\\log.txt";
if (!System.IO.File.Exists(filename))
System.IO.File.Create(filename);

System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true);
sw.Write(DateTime.Now+"\n\r"+Server.GetLastError()+"\n\r\n\r");
sw.Close();
Response.Redirect("error.htm");
کدها بسیار ساده هستند و نیاز به توضیحات ندارن لذا تنها به ذکر نکات ذیل بسنده می کنم :
1-فضای نام system.IO کلاسهایی رو برای کار با فایلها در اختیار ما قرار میده که دارای متدهای بسیار جالبی هستند .
2- به علاقه مندان کار بافایل توصیه می کنم مقاله زیر رو مطالعه کنند :

http://www.persianarticle.org/article.aspx?id=34&idauthore=1
3- متد Server.GetLastError() آخرین باگ به وجود اومدهرو بر می گردونه .

تا اینجا کاری که می خواستیم انجام شد . و با بروز هر خطایی متن خطا به همراه تاریخ وزمان در فایل متنی log.txt ذخیره می شن . ولی ما هنوزم می خوایم حرفه ای تر عمل کنیم .
فرض کنید مدیر بخواد خطاها رو چک کنه هر بار باید این فایل متنی رو باز کنه . که صورت خوشی نداره بنابراین یه صفحه دیگه به پروژه اضافه کنید (ترجیحا در پوشه admin) به نام viewlog.aspx و درون اون یه listbox به نام ListBox_error قرار بدین و در رویداد page_load صفحه کد زیر رو قرار بدین :






protected void Page_Load(object sender, EventArgs e)
{
string filename = Server.MapPath("~") + "\\log.txt";
StreamReader sw = new StreamReader(filename, true);
while (!sw.EndOfStream)
{
ListBox_error.Items.Add(sw.ReadLine().ToString());

}

sw.Close();
}







با این کد با هر بار لود صفحه متن داخل فایل log.txt درون listbox نمایش داده خواهد شد .

نکته : Server.MapPath("~") آدرس فیزیکی root رو بر می گردونه.
نکته: =Server.MapPath(".") آدرس فیزیکی پوشه ای که صفحه در اون قرار داره رو بر می گردونه .

موفق باشید .
علیرضا کیانی مقدم
بهمن ماه 1389

دانلودpdf مقاله

b.paseban
شنبه 23 بهمن 1389, 18:01 عصر
با تشکر از زحمات شما دوست گرامی.
من این سوال رو صبح توی همین تالار پرسیدم http://barnamenevis.org/showthread.php?274478-%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87-%D8%B9%D9%84%D8%AA-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%D9%BE%D8%A7%D8%A8%D9%84%DB%8C%D8%B4
و الان مقاله مربوط به اون سوال رو دارم میبینم.امروز روز شانس منه.:کف:
واسه اینکه صفحه 404 ما شکل قشنگتری داشته باشه برید به این لینک ها:

http://speckyboy.com/2010/03/10/50-exanples-of-creative-404-page-not-found-pages/
http://www.tutzone.org/2009/05/31-cool-404-error-page-designs.html