PDA

View Full Version : آموزش: دسترسی به قسمتهای مختلف در وب کانفیگ با کد نویسی



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 میشه لیست تمامی فیلدهای پروفایل رو بدست آورد.
و البته کاربردهای بسیار دیگه...

mRizvandi
پنج شنبه 12 شهریور 1394, 19:55 عصر
سلام
یکی از پروژه هام که از همین روال برای پیدا کردن مسیر صفحه خطای 404 استفاده می کرد، امروز به مشکل برخورد!
بعد از دیباگ کردن متوجه شدیم که باز کردن فایل با خطا مواجه شده. یعنی خط اول از کد پست قبلی.
دلیل این موضوع کاملا نامشحص بود، کلی جستجو در اینترنت و اینکه چرا این خطا بعد از مدتی تازه دیده شده!
بالاخره مشخص شد که مجوزهای دسترسی به Web.Config روی هاست تغییر کرده برای همین برنامه نمی تونست مسیر رو باز کنه.
اگر در Local با این موضوع روبرو شدید، وضعیت UAC رو خاموش کنید یا ویژوال استدیو رو در حالت Run As Administrator اجرا کنید.

موفق باشید