mRizvandi
جمعه 08 فروردین 1393, 14:13 عصر
سلام
به دنبال راه حلی برای دسترسی به بخشهای مختلف وب کانفیگ بودم و تصمیم گرفتم همون چند خط کد رو اینجا هم بذارم که بقیه دوستان هم استفاده کنند.
همونطور که حتما همه دوستان میدوند با استفاده از کلاس System.Configuration.ConfigurationManager و خصوصیت AppSettings میشه به کلیدهایی که در بخش appSettings در فایل web.config قرار دارند دسترسی داشت. اما این کلاس روشی برای دسترسی به قسمتهای دیگه web.config ارائه نمیکنه. (البته به جز connectionStrings)
برای دسترسی به قسمتهای دیگه باید از کلاس دیگه ای استفاده کنید:
فضای نام System.Web.Configuration حاوی تمامی کلاسها و اطلاعات قرار گرفته در web.cofig است.
سناریو این هست:
وقتی کاربر صفحه ای رو باز میکنه که دارای QueryString هست، دیتای مورد نظرش رو میبینه. مثلا فرض کنید صفحه نمایش خبر باشه و قرار هست با QueryString خبر مورد نظر نمایش داده بشه.
من میخوام به جای نمایش پیغام در خود همون صفحه، کاربر رو به صفحه خطا 404 هدایت کنم. (و زیبایی این کار زمانی است که شما از UrlRewriting هم استفاده کرده باشید)
(خطای 404 همون خطای صفحه پیدا نشد هست)
مساله اینجاست که من نمیخوام کدم رو نسبت به وب سایتهای مختلف تنظیم کنم، پس باید به روشی خودم مسیر خطای 404 رو پیدا کنم و کاربر رو هدایت کنم.
بقیه مساله رو از روی کد میشه ادامه داد:
//Open web.config at root of web application
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.O penWebConfiguration("~");
//Access CustomErrors section from System.Web parent's section
System.Web.Configuration.CustomErrorsSection customErrorInfo = (System.Web.Configuration.CustomErrorsSection)conf ig.GetSection("system.web/customErrors");
//Get page not found key and values
System.Web.Configuration.CustomError pageNotFound = customErrorInfo.Errors.Get("404");
//redirect user to Redirect url of error 404
Response.Redirect(pageNotFound.Redirect);
من تمامی فضاهای نام رو نوشتم که مشخص باشه هر کلاسی مربوط به کدام فضای نام هست.
فضای نام System.Web.Configuration حاوی کلاسهای متناظر با بخشهای web.config هست.
یک مثال: بدست آوردن لیست تمامی مشخصات پروفایل کاربر که در وب کانفیگ تعریف شده. با استفاده از کلاس ProfileSection میشه لیست تمامی فیلدهای پروفایل رو بدست آورد.
و البته کاربردهای بسیار دیگه...
به دنبال راه حلی برای دسترسی به بخشهای مختلف وب کانفیگ بودم و تصمیم گرفتم همون چند خط کد رو اینجا هم بذارم که بقیه دوستان هم استفاده کنند.
همونطور که حتما همه دوستان میدوند با استفاده از کلاس System.Configuration.ConfigurationManager و خصوصیت AppSettings میشه به کلیدهایی که در بخش appSettings در فایل web.config قرار دارند دسترسی داشت. اما این کلاس روشی برای دسترسی به قسمتهای دیگه web.config ارائه نمیکنه. (البته به جز connectionStrings)
برای دسترسی به قسمتهای دیگه باید از کلاس دیگه ای استفاده کنید:
فضای نام System.Web.Configuration حاوی تمامی کلاسها و اطلاعات قرار گرفته در web.cofig است.
سناریو این هست:
وقتی کاربر صفحه ای رو باز میکنه که دارای QueryString هست، دیتای مورد نظرش رو میبینه. مثلا فرض کنید صفحه نمایش خبر باشه و قرار هست با QueryString خبر مورد نظر نمایش داده بشه.
من میخوام به جای نمایش پیغام در خود همون صفحه، کاربر رو به صفحه خطا 404 هدایت کنم. (و زیبایی این کار زمانی است که شما از UrlRewriting هم استفاده کرده باشید)
(خطای 404 همون خطای صفحه پیدا نشد هست)
مساله اینجاست که من نمیخوام کدم رو نسبت به وب سایتهای مختلف تنظیم کنم، پس باید به روشی خودم مسیر خطای 404 رو پیدا کنم و کاربر رو هدایت کنم.
بقیه مساله رو از روی کد میشه ادامه داد:
//Open web.config at root of web application
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.O penWebConfiguration("~");
//Access CustomErrors section from System.Web parent's section
System.Web.Configuration.CustomErrorsSection customErrorInfo = (System.Web.Configuration.CustomErrorsSection)conf ig.GetSection("system.web/customErrors");
//Get page not found key and values
System.Web.Configuration.CustomError pageNotFound = customErrorInfo.Errors.Get("404");
//redirect user to Redirect url of error 404
Response.Redirect(pageNotFound.Redirect);
من تمامی فضاهای نام رو نوشتم که مشخص باشه هر کلاسی مربوط به کدام فضای نام هست.
فضای نام System.Web.Configuration حاوی کلاسهای متناظر با بخشهای web.config هست.
یک مثال: بدست آوردن لیست تمامی مشخصات پروفایل کاربر که در وب کانفیگ تعریف شده. با استفاده از کلاس ProfileSection میشه لیست تمامی فیلدهای پروفایل رو بدست آورد.
و البته کاربردهای بسیار دیگه...