PDA

View Full Version : یه ایراد ناراحت کننده در redirect ,try,catch



raravaice
پنج شنبه 22 فروردین 1387, 15:55 عصر
سلام

نکته جالب 1 :

دوستان کد زیر رو در نظر بگیرن.



Try
Response.Redirect("http://Ok.com")
Catch ex As Exception
Response.Redirect("http://Error.com")
End Try
منطق میگه این برنامه Error نداره و صفحه باید Redirect بشه به ok.com ولی ASP.NET تو این مورد چیزه دیگه ای رو میگه و اول Rediect میکنه به Ok.com بعد دوباره Redirect میکنه به Error.com .

نکته جالب 2 :
حالا ما میایم تو بلاک catch مقدار ex.message رو میریزیم تو فایل.



Try
Response.Redirect("http://Ok.com")
Catch ex As Exception
IO.File.AppendAllText("d:\ffffffffff.txt", ex.Message & " df vd'")
Response.Redirect("http://Error.com")
End Try
جالب اینکه : از بلاک Catch فقط دستور Response.redirect هست که اجرا میشه.

علت این مسئله:

شما وقتی Response.Redirect رو فراخونی میکنی Asp.net میاد براش یه Thread جدید در نظر میگیره که تمام اتفاقا اونجا میافته
"البته این چیزی که من تشخیص دادم شاید علت چیزه دیگه ای باشه! "

راه حل : ("که متاسفانه عاری از عیب هم نیست")Response.redirect در حالت پیش فرض با مقدار پارامتر True برای Response.End کار میکنه یعنی :


Response.Redirect("url.com",True)
و در صورت استفاده از این حالت این مشکل پیش میاد و برای انجام صحیح باید از :


Response.Redirect("url.com",False)
استفاده بشه. ولی اگر بعد از این دستور از Response.End استفاده بشه دوباره همون اتفاق میافته.

عین همین مشکلات برای Server.Transfer وجود داره که میتونید از Server.Execute استفاده کنید.

------------------------------------------------------------------------
دوستان اگر راه حل معقول تری پیدا کردن دریغ نکنن چون این روش خیلی درد سر سازه.

موفق باشید

Behrouz_Rad
پنج شنبه 22 فروردین 1387, 18:17 عصر
این مشکل خیلی قدیمیه...
در موردش خیلی صحبت شده...
در گوگل جستجو کنی مقالات زیادی در این مورد پیدا می کنی...
http://www.google.com/search?q=%22response.redirect%22%2Bcatch&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
مثلا:
http://www.dotnetjunkies.com/WebLog/shaunakp/archive/2005/02/15/54439.aspx

دلیلش هم تقریبا همون چیزیه که گفتی.

موفق باشید.

raravaice
پنج شنبه 22 فروردین 1387, 18:31 عصر
این مشکل خیلی قدیمیه...


یعنی هدفمند بوده که از ورژن 1.1 تا الان مورد بررسی قرار ندادنش؟

Behrouz_Rad
پنج شنبه 22 فروردین 1387, 21:31 عصر
حتما دلیل قانع کننده ای واسش وجود داشته!
مثل مشکلی که در متد AddDays کلاس PersianCalender گزارش کردم اما تا به حال برطرف نشده!