چگونگی بازنویسی آدرس ها (UrlRewriting)

فوریه 5, 2008 با aspcodes

کار UrlRewriting تبدیل یک آدرس اینترنتی واضح و با معنا به یک آدرس واقعی دارای Query String جهت تفسیر موتور Asp.net است. دو آدرس زیر را در نظر بگیرید :

http://aspcode.ir/article.aspx?id=4&type=print

http://aspcode.ir/article-4-print.html

یقینا” آدرس دوم با معنی تر از آدرس اول است.در ضمن تا حدودی امکان هک شدن سایت از طریق تزریق عبارات Sql را کاهش می دهد. اجازه دهید ابزار های موجود برای UrlRewriting را بررسی کنیم.

بعد از ظهور Asp.net 2.0 خبر پشتیبانی استاندارد این تکنولوژی از UrlRewriting بسیار جالب توجه بود. برای این منظور در Asp.net 2.0 تنها کافیست مقداری تغییر در Web.Config دهید :

 <urlMappings enabled=”true”>
<add url=”~/show-5.htm”
mappedUrl=”~/show.aspx?id=5″ />
</urlMappings>

دقت فرمایید تنظیمات فوق متعلق به شاخه <system.web> می باشد و باید در این بخش از Web.Config تعریف شود. در مثال بالا url آدرسی است که کاربر مشاهده می کند و mappedUrl آدرس حقیقی ماست. اما همانطور که از ظواهر امر پیداست این روال کاری، تنها برای مواقعی مفید خواهد بود که تعداد دفعات استفاده محدود باشد و در صورتی که تعداد آدرس ها بالا باشد ، مدیریت آنها بسیار کار مشکل و زمانبری خواهد بود.

برای حل این مشکل ابزار های دیگری در دسترس برنامه نویسان قرار گرفته است. یکی از بهترین ابزار ها را می توان در سایت www.UrlRewriting.net یافت. جهت استفاده از این ابزار که Open Source هم می باشد ، می توانید مستندات آن و تمام آنچه که نیاز دارید از آدرس فوق دانلود کنید.
هر چند که مستندات و مطالب ارائه شده در سایت فوق کاملا” جامع است ، ولی در ادامه این مقاله، توجه شما را به مثال هایی از UrlRewriting در Asp.net جلب می کنم.

ابتدا فایل ضمیمه مقاله را دریافت کنید و Intelligencia.UrlRewriter.dll را به پوشه Bin پروژه خود انتقال دهید. حال مراحل زیر را جهت بازخوانی یک آدرس ثابت دنبال کنید :

فایل Global.asax را باز و رویداد Application_BeginRequest را بصورت زیر کد نویسی می کنیم. همانطور که از نام این رویداد پیداست زمانی کد اجرا می شود که درخواستی به سمت موتور Asp.net ارسال شود.

if (Request.Url.ToString().Contains(“show.htm”))
{
Context.RewritePath(“show.aspx”);
}

در این مثال محتوای صفحه ای با نام show.htm که بصورت مجازی ایجاد شده است و وجود خارجی ندارد از صفحه ای دیگر با نام show.aspx خوانده می شود.
سپس فایل web.config را باز و محتوای آن را به صورت زیر تنظیم نمایید :

<configSections>
<section name=”rewriter” type=”Intelligencia.UrlRewriter.Configuration. RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter”/>
</configSections>

<httpModules>
<add name=”UrlRewriter” type=”Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter”/>
</httpModules>

<rewriter>
<rewrite url=”show.htm” to=”show.aspx”/>
</rewriter>

لطفا” به محل قرار گرفتن تغییرات دقت ویژه ای داشته باشید :

<configSections> :  داخل تگ <configuration> قرار گیرد.
<httpModules> :  داخل تگ <system.web> قرار گیرد.
<rewriter> : داخل تگ <configuration> و خارج و بعد از تگ<system.web> قرار گیرد.

توجه فرمایید کد کامل برنامه را نیز می توانید در انتهای برنامه دانلود نمایید.

مخفی کردن Query String :
شاید به ذهن شما رسیده باشد که چگونه می توان آدرس های مجازی دارای Query String را نیز بازنویسی کنیم. این کار نیز بسیار ساده است و تفاوتهای جزئی با مثال بالا دارد.
برای اینکار دوباره فایل Global.asax را باز و رویداد Application_BeginRequest را بصورت زیر کد نویسی می کنیم :

if (Request.Url.ToString().Contains(“show-(.+).htm”))
{
Context.RewritePath(“show.aspx?id=$1″);
}

علامت (.+) نماینده یک متغیر است که مقدار Query String را می گیرد و $1 در خط بعدی همان مقدار (.+) و نماینده مقدار Query String در آدرس حقیقی است. همچنین تگ rewrite را بصورت زیر تغییر دهید :

<rewrite url=”show-(.+).htm” to=”show.aspx?id=$1″/>

در صورتی که آدرس شما دارای بیش از یک پارامتر Query String است (برای مثال سه پارامتر) بصورت زیر عمل کنید :

show-(.+)-(.+)-(.+).htm
Show.aspx?Page=$1&amp;Id=$2&amp;state=$3

همچینین تگ rewrite را مانند مثالها قبلی تغییر دهید.
فکر می کنم با مثال های متعدد در این مقاله، شما این مهارت را پیدا کرده باشید تا  آدرس ها را بصورت مجازی ایجاد کنید.

نکته :

دقت کنید که در بازخوانی آدرسهای با چندین پارامتر Query String در قسمت آدرس حقیقی قبل از & ، amp; را قرار دهید. در ضمن برای بازخوانی مقدار Query String نیاز به کد نویسی خاصی نیست و با در نظر گرفتن مثال فوق بعد از UrlRewriting با دستور زیر در صفحه show.aspx می توانیم مقدار Query String را بخوانیم :

Response.Write((string)Request.QueryString["id"]);
منبح : aspcode.ir

فیلم پرتاب نخستین کاوشگر فضایی ایران (سفیر)

فوریه 5, 2008 با aspcodes

اين موشك شامل بيش از 10 هزار تنوع قطعه در اجزای مختلف اعم از موتور، بدنه، هدايت و كنترل است كه كارشناسان رشته‌های مختلف دانشگاهی طی 10 سال گذشته ساخت تمامی اجزای آن را بومی نموده و اينك صنايع هوافضای جمهوری اسلامی قادر به ساخت كامل آن می‌باشد.

يك محصول از اين نوع موشك در مركز سازمان هوافضای وزارت دفاع كه محل افتتاح نخستين سامانه فضایی ايران است قرار داده شده تا رسانه‌ها و مسئولين از اين دستاورد بزرگ كشور بازديد كنند.

قرار است ماهواره بومی “اميد” در آينده نزديك توسط موشك ماهواره ‌‌بر ساخت كشورمان و از پايگاه پرتاب فضايی ايران به مدار پرتاب شود.

مراسم شليك اين موشك به صورت زنده و از محل پايگاه پرتاب فضايی ايران و در حضور رئيس جمهور و جمعی از مسئولين لشكری و كشوری توسط صدا و سيمای جمهوری اسلامی برای مردم ايران و جهان پخش شد.

فیلم ويديویی: فرمت SWF | YouTube
تصاوير: کلیک کنید
منبع خبر: فارس نیوز

گوگل خطاب به مایکروسافت: اینترنت محل انحصار طلبی نیست!

فوریه 4, 2008 با aspcodes

پس از ارائه پیشنهاد مایکروسافت برای خرید کمپانی یاهو، گوگل با احساس خطر رکود جایگاه خود در میان کاربران اینترنت، سیاست واضح خود در این رابطه را اعلام کرد.

گوگل که پیش بینی می شد به شدت از این پیشنهاد مایکروسافت غافلگیر شود با درج مطلبی با عنوان “یاهو و آینده اینترنت” در Google Official Blog، رقیب دیرینه خود [یاهو] را ترغیب کرده است که به سوی پیشنهاد مایکروسافت سر تعظیم فرود نیاورد و به ادعای گوگل، اینترنت آزاد را بی طرف نگاه دارد.

کمپانی گوگل که با گسترش ابزارها و سرویس های خود به کاربران اینترنت رقبای بسیاری را در عرصه های مختلف طلبیده است، قبول دارد که آمیخته شدن دو شرکت بزرگ یاهو و مایکروسافت به یکباره ضربه محکمی به سیاست های مالی گوگل وارد می کند.

مطلب پیرامون سیاست گوگل و معامله میان یاهو و مایکروسافت توسط آقای David Drummond در وبلاگ رسمی گوگل نوشته شده است. ترجمه کامل این مطلب را در ادامه می خوانید:

آزادی اینترنت قدرتی است که یاهو و گوگل را امکان پذیر کرده است. ایده خوبی که کاربران آنرا کاربردی میدانند به سرعت گسترش می یابد. تجارت ها در ادامه این ایده ها ساخته می شوند. کاربران دائماً از نوآوری ها سود می برند. این قدرتی است که اینترنت را این چنین به مکانی پر مهیج تبدیل کرده است.

بنابراین پیشنهاد خصمانه مایکروسافت به یاهو سوالات پردردسر بسیاری را مطرح خواهد کرد. اهمیت آن بیش از یک معامله مالی و خرید یک شرکت توسط دیگری می باشد. این درباره حراست از اصول و ساختار اصلی اینترنت می باشد: آزادی و نوآوری.

آیا مایکروسافت اکنون می تواند همان سیاست غیر قانونی و نامناسب خود را که برای رایانه های شخصی دنبال کرد در اینترنت دنبال کند؟ درحالیکه اینترنت از حس رقابتی نوآوری ها سود می برد، مایکروسافت اغلب تلاش کرده است که انحصار طلبی های خود را گسترش دهد و بر ضلع های جدید بازار تسلط کند.

آیا معامله مایکروسافت و یاهو — جدا از موارد قانون شکنی — می تواند تجارب تلخ از سیستم عامل ها و مرورگرها را به اینترنت گسترش دهد؟ همچنین، جمع مایکروسافت و یاهو مساوی است با غوطه ور شدن بخش های بسیاری از حساب های ایمیل و پیغام رسان های فوری. و میان این دو کمپانی سنگین ترین پرتال های ترافیک اینترنت اعمال می شود.

آیا آمیختن این دو کمپانی و سوء استفاده از یک نرم افزار رایانه ای می تواند غیر منصفانه دسترسی کاربران به سرویس های مبتنی بر وب ایمیل، پیغام رسان رقیبان را محدود کند؟ سیاستگذاران اطراف دنیا می بایست این سوالات را پاسخگو باشند و مصرف کنندگان انتظار پاسخ های قانع کننده ای را دارند.

این پیشنهاد خصمانه در روز جمعه اعلام گشت، بنابراین مدت زمان کافی برای رسیدگی به این سوالات وجود خواهد داشت. ما آزادی، نوآوری و انتخاب اینترنت را جدی می گیریم. این ها هسته های فرهنگ ما هستند. ما اعتقاد داریم که خواسته کاربران اینترنت اولویت نخست را دارا می باشد — و باید نخست باشد — تا شایستگی انجام این معامله بازرسی شوند و چاره ها یافت شوند.

مطلب فوق متن کاملی بود که شرکت گوگل در رابطه با روشن سازی سیاست خود پیرامون معامله یاهو و مایکروسافت منتشر کرد. با این عمل گوگل، رویاروی شدن این دو شرکت بزرگ فعال در عرصه رایانه ها تا این شدت، قادر است که وضعیتی کاملا غیر قابل پیش بینی بر بازار، سهام بورس، رشد محبوبیت سرویس ها و غیره حاکم کند.

مشاهده: Yahoo! and the future of the Internet
منبع خبر: WinBeta.Net

روش تبديل اطلاعات از بانک اطلاعاتی به XML و نمايش اطلاعات آن

فوریه 4, 2008 با aspcodes

در اين مقاله سعی دارم که نحوه نوشتن در XML و خواندن از آن را شرح دهم. برای مثال ما يك وبلاگ داريم که اطلاعات را از بانک اطلاعاتی Access می خواند. ولی من برای اينکه همين اطلاعات را در يک فايل XML هم داشته باشم اين کد را به Load صفحه اضافه کردم:

Dim DS As New DataSet()
Dim strConnect As New OleDbConnection(ConfigurationSettings.AppSettings(“datasource”))
Dim objSQLAdapter As New OleDbDataAdapter(“SELECT * from blog order by id DESC”, strConnect)
objSQLAdapter.Fill(DS, “blog”)
Dim doc As XmlDataDocument = New XmlDataDocument(DS)
Dim writer As XmlTextWriter = New XmlTextWriter(“D:\www\weblog\weblog.xml”, Nothnig)
writer.Formatting = Formatting.Indented
doc.Save(writer)

در اين کد با استفاده از شئ DataSet، اطلاعات را از جدول مورد نظر بانک اطلاعاتی خود می خوانيم و آن را در يک فايل XML به نام weblog.xml ذخيره می کنيم. اگر اين کد را اجرا کنيم يک فايل XML ايجاد می شود و هر وقت صفحه اول اجرا شود فايل XML رونويسی می شود.

اما حالا يک فايل XML داريم و می خواهيم از آن استفاده کنيم. مخصوصا استفاده از XML برای سايت های خبری يا وبلاگ ها بسيار مناسب است. مثلا فرض کنيد که می خواهيم خبرهای موجود در يک سايت ديگر که به شکل XML ارائه می شوند (مانند RSS) را در سايت خودمان نمايش دهيم. برای اين کار ابتدا يک فايل ASPX ايجاد کنيد و اين کد را در قسمت Design يا همان HTML آن بنويسيد.

<asp:DataList id=”theDataList” runat=”server” Width=”100%” dir=rtl CssClass=text>
<ItemTemplate>
تاريخ :<%# DataBinder.Eval(Container.DataItem, “news_date”) %><br>
عنوان : <%# DataBinder.Eval(Container.DataItem, news_title”) %><br><br>
<%# DataBinder.Eval(Container.DataItem, “news_body”) %><br>
<hr>
</ItemTemplate>
</asp:DataList>

ما در اينجا يک کنترل DataList ايجاد کرديم و مقادير مورد نظر را در آن نوشتيم. حالا کدی که در Load اين صفحه بايد بنويسيم به اين شکل خواهد بود:

Dim ds As New DataSet()
ds.ReadXml(“d:\www\weblog\weblog.xml”, XmlReadMode.Auto)
theDataList.DataSource = ds
theDataList.DataBind()

اگر اين صفحه را اجرا کنيد تمام فيلدهای XML در اين فايل ASP.NET نمايش داده خواهد شد. در مثال بالا از يک فايل XML موجود بر روی ديسک استفاده شده است حال آنکه می توانيم بجای اين آدرس محلی از يک آدرس موجود در وب که همان آدرس سايت مورد نظر است استفاده کنيم. مثلا اگر بخواهيد اخبار سايت مورد نظر را در سايت خود نمايش دهيد کافی است اينگونه عمل کنيد: :

Dim ds As New DataSet()
ds.ReadXml(“http://www.website.com/weblog.xml”,XmlReadMode.Auto)
theDataList.DataSource = ds
theDataList.DataBind

منبع : aspcode.ir

معرفی کاربردهای Multiview و View و نحوه استفاده از آنها

فوریه 4, 2008 با aspcodes

برنامه نویسان Asp.net 1.x ، جهت نمایش و یا عدم نمایش مجموعه ای از کنترل ها ، از کنترل Panel استفاده می کردند. برای مثال جهت ساخت یک Wizard سه مرحله ای ، سه کنترل Panel در فرم قرار می دادند و در پایان هر مرحله با مقدار دادن به خاصیت Visible کنترل Panel ، سعی به مرئی و نامرئی کردن جمعی کنترل ها و در نهایت شبیه سازی یک Wizard داشتند. نمونه کد زیر را در نظر بگیرید :

ادامه‌ی این ورودی را بخوانید »