PDA

View Full Version : صفحه 404



xsbehx
یک شنبه 04 مرداد 1394, 18:58 عصر
سلام
چطوری می تونم تو asp کاری کنم که اگر به هر دلیلی کاربر ادرسی صفحه ای رو تو سایت وارد کرد که همچین ادرسی اصلا موجود نبود، بره به یه صفحه دیگه و اونجا پیغام بده که همچین صفحه وجود نداره

amir_T_2008
یک شنبه 04 مرداد 1394, 19:05 عصر
اول یک صفحه درست کنید که میخواید در موقع ارور نمایش داده بشه بعد یک فایل Global.asax بسازید و در قسمت Application_Error صفحه خودتونو آدرس دهی کنید




void Application_Error(object sender, EventArgs e)
{

Response.Redirect("~/Error.aspx");
}



موفق باشید

LostOfMind
یک شنبه 04 مرداد 1394, 19:08 عصر
اول یک صفحه درست کنید که میخواید در موقع ارور نمایش داده بشه بعد یک فایل Global.asax بسازید و در قسمت Application_Error صفحه خودتونو آدرس دهی کنید




void Application_Error(object sender, EventArgs e)
{

Response.Redirect("~/Error.aspx");
}



موفق باشید

خطای 404 برای عدم وجود صفحه است حالا اگر خطایی دیگری رخ بده باز هم به اون صفحه هدایت میشه

راه خل مناسب تری وجود نداره که با توجه به نوع خطا به صفحه مربوطه هدایت بشه؟

amir_T_2008
دوشنبه 05 مرداد 1394, 01:11 صبح
چرا اونوقت باید بیاید کد بنویسید و آدرس از دیتابیس بخونید و در صورت عدم وجود آدرس بیاد هدایت بشه به صفحه ارور.البته این یک راه حل هستش شاید راه حلهای دیگه هم وجود داشته باشه

پیام حیاتی
دوشنبه 05 مرداد 1394, 01:42 صبح
خطای 404 برای عدم وجود صفحه است حالا اگر خطایی دیگری رخ بده باز هم به اون صفحه هدایت میشه

راه خل مناسب تری وجود نداره که با توجه به نوع خطا به صفحه مربوطه هدایت بشه؟
سلام
می توانید برای خطاهای مختلف page مختلف ایجاد کنید مثال ها در نت هستند جستجو کنید در این کتاب (http://www.pendarepars.com/book/%D9%85%D8%B1%D8%AC%D8%B9-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%D9%8A-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%8 6%D9%88%D9%8A%D8%B3%D9%8A-asp-net-4-5-%D8%AF%D8%B1-csharp-%D8%A7%D8%B2-%D9%85%D8%A8%D8%AA%D8%AF%D9%8A-%D8%AA%D8%A7-%D9%BE%D9%8A%D8%B4%D8%B1%D9%81%D8%AA%D9%87/?filter=asp.net) هم کامل توضیح داده شده است اما این روش مناسبی نیست ، شما در پایان پروژه باید آن را تست و بازبینی کنید و خطاهای ایجاد شده را مرتفع کنید ، استفاده از try,catch و اعتبارسنجی های سمت کلاینت و سرور که بر اساس کدنویسی شما حاصل می شود از ایجاد خطاها جلوگیری می کند.
موفق باشید.

pbm_soy
دوشنبه 05 مرداد 1394, 03:45 صبح
بله شما از طریق رخداد on error میتوانید تمام خطاها را مدیریت کنید
حالا داخل خود این رخداد یا توی اون صفحه ای که رفتید در لودش کارای لازم را انجام بدید
البته راه خوب همون تو خود تابع است و راحت میتوانید از طریق ارگومان e به اطلاعات خطا دسترسی داشته باشید مانند شماره و نوع و پیام خطا و براساس آنها نتیجه گیری کنید

مورد بعدی خطاهای اینچنینی را میتوانید از طریق وب سرور و یا فایل وب کانفیگ مدیریت کنید بخشی بنام custom error دارد ودر آن میتوانید برای هرنوع خطایی فایلی را معرفی کنید که آن فایل ظاهر شود

daffy_duck376
دوشنبه 05 مرداد 1394, 05:04 صبح
مورد بعدی خطاهای اینچنینی را میتوانید از طریق وب سرور و یا فایل وب کانفیگ مدیریت کنید بخشی بنام custom error دارد ودر آن میتوانید برای هرنوع خطایی فایلی را معرفی کنید که آن فایل ظاهر شود

برای مشکل شما این روشی که دوستمون گفت بهترین راه حله

xsbehx
دوشنبه 05 مرداد 1394, 10:31 صبح
سلام
خیلی ممنون بابت پاسختون
اینو اضافه می کنم برای باقی دوستان که دنبالش هستند:
بیش از 40 نوع خطای مختلف داریم که تقریبا بیش از 30 تاش خطاهای سمت کلاینت هستن و باقی خطاهای سمت سرور
لیست کاملش رو می تونید اینجا ببینید (http://www.w3schools.com/tags/ref_httpmessages.asp)
اگر ما بخوایم یکی از این خطاها را مدیریت کنیم، مثلا خطای 404 که بخاطر نبودن یک صفحه اتفاق می افته، باید تو وب کانفیگ همچین کدی داشته باشیم:


<customErrors mode="On">
<error statusCode="404" redirect="ErrorPage.aspx?Error=404"/>
</customErrors>

مشکل اینجا اتفاق می افته که اگر تو پروژه تون هر خطایی اتفاق بیافته، شما به صفحه 404 هدایت می شید
برای اینکار باید بیاد حتما بقیه خطا ها رو هم مدیریت کنید تا با این خطا قاطی نشه
یک راهش اینه شما بیاید بگید که من از try-catch استفاده می کنم و مطمئن هستم که هیچ خطایی رخ نمی ده و تنها خطای موجود خطای 404 خواهد بود!
که البته و صد البته این اشتباهه
اولا ساختار try-catch تمام خطاها رو مدیریت نمی کنه. مثلا خطاهای حاصل از سرریز رو نمی شه مدیریت کرد با این ساختار
ثانیا امکان داره به هر دلیله دیگه ای خطایی اتفاق بیافته که شما انتظارشو نداشتید
پس باید بیایم و برای این احتمالات تو وب کانفگ خطاهای دیگه رو هم مدیریت کنیم که کد وب کانفیگ می شه این شکلی :


<customErrors mode="On">
<error statusCode="404" redirect="ErrorPage.aspx?Error=404"/>
<error statusCode="500" redirect="ErrorPage.aspx?Error=500"/>
</customErrors>

حالا باید بیایم برای هر 43 تا خطای موجود یک خط اینجا کد بنوسیم که اصلا نیازی هم بهشون نداریم!؟
خوشبختانه لازم نیست.
باید بیایم کد رو اینطوری تغییر بدیم تا لازم نباشه برای هر خطا یک خط به کدمون اضافه کنیم:



<customErrors mode="On" defaultRedirect="ErrorPage.aspx?500">
<error statusCode="404" redirect="ErrorPage.aspx?Error=404"/>
<error statusCode="500" redirect="ErrorPage.aspx?Error=500"/>
</customErrors>


این کد باعث می شه که من دو نوع خطا رو بررسی کرده باشم که امکان اتفاقش زیاده و لازم دارم مدیریتشون کنم
اولی خطای 404 و دومی خطا Internal Server
تکلیف بقیه خطا ها هم با این عبارت defaultRedirect="ErrorPage.aspx?500 مشخص می شه
یعنی هر خطای دیگه ای هم اتفاق افتاد بیا سراغ صفحه مورد نظر
حالا ما اینجا با کوئری استرینگ کد خطا رو به صفحه مورد نظر انتقال می دیم و اونجا می فهمیم که کدوم خطا اتفاق افتاده و یا اینکه دوتا صفحه جداگونه، یکی برای 404 و یکی هم برای بقیه خطا ایجاد کنیم

من خودم دیشب کلی گشتم ولی مثل اینکه همین چهارخط توضیح منو کسی از دلش نیومده تو سطح اینترنت بزاره!
نمی دونم این جامعه برنامه نویس های ایرانی چرا اینطورین! هر چی که بلدن برای خودشون نگه می دارن!
باز معرفت شما دوستان که کمک کردید و می کنید
خیلی ممنون