مدیریت خطاها در یک برنامه ASP.NET MVC
پنجشنبه 23 مهر 1394استفاده از فیلتر ، استفاده از صفحه خطای سفارشی دیگری بجای فایل Error.cshtml ، دسترسی به اطلاعات استثناء در صفحه نمایش خطاها ، ثبت اطلاعات استثناهای رخ داده به کمک ELMAH
استفاده از فیلتر HandleError یکی از فیلترهای توکار ASP.NET MVC به نام HandleError، میتواند کار هدایت کاربر را به یک صفحهی خطای عمومی، در حین بروز استثنایی در برنامه، انجام دهد. برای آزمایش آن یک برنامه خالی جدید ASP.NET MVC را آغاز کنید. سپس یک کنترلر جدید را با محتوای زیر به آن اضافه نمائید: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 using System; using System.Web.Mvc; namespace MvcApplication13.Controllers { public class HomeController : Controller { [HandleError] public ActionResult Index() { throw new InvalidOperationException(); return View(); } } } در اینجا جهت آزمایش برنامه، به عمد یک استثنای دستی را صادر میکنیم. برای آزمایش برنامه هم نیاز است آنرا خارج از دیباگر VS.NET اجرا کرد (آدرس برنامه را مستقیما خارج از VS.NET در یک مرورگر وارد کنید). همچنین یک سطر زیر را نیز لازم است به فایل web.config برنامه اضافه نمائید: 1 2 3An Error Has Occurred
@if (Model != null) {@Model.Exception.GetType().Name thrown in @Model.ControllerName @Model.ActionName
} البته این نکته را صرفا به عنوان اطلاعات عمومی در نظر داشته باشید. زیرا اگر قرار باشد مجددا اصل استثناء را نمایش دهیم، همان صفحه زرد رنگ ASP.NET شاید بهتر باشد. استفاده از تگ customErrors در فایل Web.config برنامه ویژگی حالت تگ customErrors در فایل web.config برنامه، سه مقدار را میتواند بپذیرد: الف) Off : صفحه زرد رنگ معرفی خطای ASP.NET را به همراه تمام اطلاعات مرتبط با استثنای رخ داده نمایش میدهد. ب) RemoteOnly : همان حالت الف است با این تفاوت که صفحه خطا را فقط در کامپیوتری که وب سرور بر روی آن نصب است نمایش خواهد داد. ج) On : یک صفحه خطای سفارشی شده را نمایش میدهد. بنابراین هیچگاه از حالت Off استفاده نکنید. زیرا خطاهای نمایش داده شده، علاوه بر برنامه نویس، برای مهاجم به یک سایت نیز بسیار دلپذیر است! حالت RemoteOnly در زمان توسعه برنامه توصیه میشود. حالت On حین توزیع برنامه باید بکارگرفته شود. مدیریت خطاهای رخ داده خارج از MVC Pipeline HandleErrorAttribute تنها استثناهای رخ داده داخل ASP.NET MVC Pipeline را مدیریت میکند (یا خطاهایی از نوع 500). اگر این نوع استثناها خارج از آن رخ دهند مثلا فایلی یافت نشود (خطای 404) و امثال آن، باید به روش زیر عمل کرد: 1 2 3 4 5- ASP.net MVC
- 2k بازدید
- 0 تشکر