تغییر آدرس url به کمک Global.asax در Asp.net

پنجشنبه 7 آبان 1394

ما در این مقاله نحوه بازنویسی آدرس URL به کمک Global.asax در برنامه های تحت نت Asp.net را آموزش خواهیم داد.سایت ما با داشتن یک آدرس ساده و کاربر پسند قادر خواهد بود در جستجوهای موتور جستجو ایندکس شود و در رتبه بالاتری نسبت با سایر وب سایت ها قرار گیرد.

تغییر آدرس url به کمک Global.asax در Asp.net

همانطور که می دانیم آدرس URL مناسب یکی از آیتم های مورد علاقه seo می باشد.سایت ما با داشتن یک آدرس ساده و کاربر پسند قادر خواهد بود در جستجوهای موتور جستجو ایندکس شود و در رتبه بالاتری نسبت با سایر وب سایت ها قرار گیرد.

ابتدا یک پروژه Asp.net  ایجاد می کنیم.برای سادگی ما فقط دو صفحه داریم .در صفحه ایندکس یک گرید ویو( grid view )که اطلاعات موجود در دیتابیس را نمایش می دهد قرار داده ایم.یکی از ستون های این گرید ویو دکمه ای است که قرار است ما را به صفحه ای که شرح جزییات آن محصول وجود دارد هدایت کند. البته در نظر داشته باشید صفحات بسیار ساده هستند و تنها مفاهیم مد نظر است .

کد مربوط به گرید ویو مانند زیر است :

<asp:GridView runat="server" ID="grid" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCommand="grid_RowCommand">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            انتخاب
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Button ID="btnSelect" runat="server" CommandName="sel" CommandArgument='<%#Eval("id") %>' Text="شرح محصول"/>
                        </ItemTemplate>
                    </asp:TemplateField>

                </Columns>

در قسمت دکمه شرح محصول از دو attribute  به نام های command name و command Argument استفاده کرده ایم .استفاده از command name برای این است که در صورتی که چند دکمه داشتیم بدانیم کاربر کدام دکمه را کلیک کرده است.

دلیل استفاده از Command Argument این است که همراه کلیک کردن دکمه اطلاعات خاصی از آن رکورد که آن را از سایرین متمایز می کند (در بیشتر مواقع id آن رکورد در دیتابیس) همراه دکمه ارسال شود تا بتوان کار خاصی بر روی دیتا انجام داد.مثلا آن را حذف یا ویرایش یا ....کرد.

بنا داریم که اگر کاربر بر روی شرح محصول کلیک کرد او را به صفحه مربوط به همان محصول هدایت کنیم.همانطور که در کد زیر می بینید در رویداد command مربوط به گرید ویو با کمک کد زیر کاربر را به صفحه products و با query string["id"] هدایت می کنیم و در صفحه products از آدرس query string["id"] را خوانده و در صفحه از آن استفاده می کنیم.

اما این ادرس آدرس جالبی نیست.بعد از product.aspx از علامت سوال استفاده کرده و بعد از پارامتر id = از عدد .بهتر این است که آدرس ما به این شکل تغییر کند:

/products.aspx/1 یا /products.aspx/2که هر کدام مربوط به محصولات شماره یک و دو است .

کد مربوط به صفحه products مانند زیر است.

   protected void Page_Load(object sender, EventArgs e)
        {
    string id= Request.QueryString["id"];
            lbl.InnerText = "این مشخصات محصول شماره "+id+"است ";
        }

برای اینکه آدرس را تغییر دهیم و بازنویسی کنیم در صفحه Global.asax در Application_BeginRequest کد های زیر را وارد می کنیم .

 protected void Application_BeginRequest(object sender, EventArgs e)
        {
            if (Request.Url.ToString().Contains("products.aspx?id=1"))
            {
                Context.RewritePath("Products.aspx/1");
            }

            string fullOrigionalpath = Request.Url.ToString();

            if (fullOrigionalpath.Contains("/Products.aspx?id=1"))
            {
                Context.RewritePath("/Products.aspx/1");
            }
            else if (fullOrigionalpath.Contains("/Products/2.aspx"))
            {
                Context.RewritePath("/Products.aspx?id=2");
            }
            else if (fullOrigionalpath.Contains("/Products/3.aspx"))
            {
                Context.RewritePath("/Products.aspx?id=3");
            }
              }

با این کار آدرس ما از products.aspx?id=1 به products.aspx/1 تغییر یافته است مانند شکل زیر

بعد از تغییر آدرس ما به شکل زیر خواهد بود 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید