بازنویسی آدرس ها در ASP.NET Web Forms



visibility  
mode_comment   ۱۸

در ASP.NET MVC به طور پیش فرض و توکار آدرس هایی که تولید میشه هم کاربر پسند و هم از نظر سئو دارای مزیت های زیادی هست اما در ASP.NET Web Forms این امکان به صورت پیش فرض وجود نداره و نیاز به کمی کد نویسی داره،در این مطلب ما با کمی دستکاری در فایل global.asax پروژه  این امکان رو برای وب سایت ASP.NET خودمون ایجاد میکنیم.

در ابتدای کار فایل Global.asax رو باز میکنیم و این تابع رو به انتهای فایل اضافه میکنیم،دقیقا بعد از متد Session_End اضافه اش میکنیم.

خوب حتما سوال پیش میاد چرا این تابع هیچ خروجی نداره و اون پارامتر ورودی هم چیه؟ تابع رو به صورت void تعریف می کنیم چون قرار نیست خروجی داشته باشه بلکه کد های داخل تابع کار اصلی رو انجام میدن؛اون پارامتر ورودی هم مسیر های درخواستی به اپلیکشن رو در اختیار ما قرار میده (پروسه هدایت درخواست های HTTP از سمت کلاینت به سمت اپلیکشن و در نهایت تابع مورد نظر برای اجرای درخواست رو بهش میگن مسیریابی یا Routing).

خوب حالا ما این تابع رو باید در متد اجرای اپلیکیشن صدا بزنیم.در همین فایل global.asax متدی با نام Application_Start وجود داره که این متد هنگامی فراخوانی میشه که اپلیکیشن ما شروع به کار میکنه و اولین درخواست براش ارسال میشه.

خوب ما در این تابع جدول مسیر های اپلیکیشن رو برای تابع خودمون به عنوان پارامتر ارسال کردیم تا بتونیم داخل تابع خودمون اونارو به مسیر صحیح هدایت کنیم.

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

و حالا میخوایم با استفاده از این کد به این شکل تغییرش بدیم.

برای این کار ما کد زیر رو به تابعی که ساختیم اضافه میکنیم.

در این کد گفتیم که اگه درخواستی به شکل Products/cat/id برای ما ارسال شد شما این درخواست رو به صفحه Products.aspx منتقل کن،در قسمت کد id رو داخل براکت قرار دادیم و این یعنی این مقدار متغییر هستش و میتونه هر مقداری باشه که در صفحه مورد نظر قابل دریافته.پارامتر اول متد MapPageRoute هم رو خالی قرار دادیم ولی توضیحش اینه که در اونجا باید نامی برای این route خودمون انتخاب کنیم تا در قسمت های دیگه ازش استفاده کنیم.

حالا برای تست صفحه Products.aspx رو باز میکنیم و در داخل متد page_load کد زیر رو می نویسیم.

اینجا از مقادیری که با درخواست ارسال شده چک میکنیم ببینیم مقدار id ست شده که اگه ست شده باشه اونو دریافت و چاپش کردیم(عنوان id دقیقا همونی هست که درتابع اصلی ثبتش کردیم،حال شما می تونید از دیتابیس اطلاعات لازم رو دریافت کنید و نشون بدید )

اگه مراحل کار رو به دزستی انجام داده باشید می تونید از آدرس Products/cat/115 به جای Products.aspx?cat_id=115 استفاده کنید.

شما به هر تعداد که خواستین میتونید برای صفحات مختلف Routing تعریف کنید و ازشون به خوبی استفاده کنید.

امیدورام مفید بوده باشه.موفق باشید

منبع:MSDN

comment دیدگاه کاربران
restless

سلام؛
ممنون آقاکیوان عزیز؛
آقا کیوان لود سایت کند شده مشکلی پیش اومده؟

کیوان علی محمدی

سلام میثم خان،نه داداش مشکلی نیست؛یعنی ما که چیزی ندیدیم،میشه بگی کجا همچین مشکلی وجود داره و چقدر تاخیر داره؟

restless

سلام کیوان جان؛
همین تو لود اولیه سایت در صفحه اول؛ البته الان خداروشکر اوکی شد!

بهنام رسولی

سلام ، عالی بود. 😀

کیوان علی محمدی

سلام خوبه حداقل به درد شما خورد 🙂

اکبر قره باغی

اقا کیوان مطلبتون واقعا خوب و کار آمد بود!
ممنون

اکبر قره باغی

خب اقا کیوان من url رو که اینجوری کنم پس چجوری باید با queryString مقدار id مطالب رو بگیرم؟!!

کیوان علی محمدی

در این جا لازم نیست دیگه شما از کوئری استرینگ استفاده کنی بلکه از route به ترتیب میتونی پارامترهایی که در تایع registerroute تعریف کردی رو بخونی،مثلا اینجا شده id حالا میتونی یه پارامتر دیگه تعریف کنی به نام cat و در صفحه مربوطه مقدار cat رو مثل آیدی بخونی.

اکبر قره باغی

درست شد اقا کیوان 🙂
ممنون

اکبر قره باغی

خب اقا کیوان یه سوال دیگه!
من چطور میتونم ادرس url رو خودم تعیین کنم؟
مثلا عنوان مطالب بره و در url بشینه!

مثل این: website.com/the-first-post

اكبر قره باغي

اقا کیوان خب من اگه بخوام ادرس های مطالبم اینطوری بشه باید چکار کنم؟
مثلا: WebSite.com/the-first-post

ممنون

کیوان علی محمدی

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

اكبر قره باغي

خب آقا کیوان تو بازنویسی آدرس ها(در روشی که شما گفتین) بالاخره باید تو یجایی id مطلب رو بدیم دیگه!!!!!

ولی خب من میخوام که اصلا id مطلب رو در url ندم!

سجاد دریس

خب بالاخره باید query بر اساس یه فیلدی به دیتابیس ارسال بشه، استفاده از غیر از id هم کمی غیر منطقیه، چونکه اولا باید کاملا دقیق باشه مقدار، و درضمن بیشتر از یک نتیجه رو برای نمایش مطلب بر نگردونه، میتونید از اسم مطلب هم استفاده کنید، البته اگه عنوان مطالبتون مشابه نباشه

کیوان علی محمدی

همون طور که سجاد گفتن لازمه یه فیلد در آدرس موجود باشه که ما گفتیم slug یا همون نام پست باشه به همون شکلی که شما گفتین دیگه لازم نیست id هم باشه،البته اگه آیدی هم باشه مشکلی برای سئو پیش نمیاد.

اكبر قره باغي

ببخشید من اینقدر سوال میپرسما 😀

fkaheh75@gmail.com

سلام وقت بخیر
میخواستم اگه میشه توضیح بدید چطور میتونم بین webform ها یی ک جدا ساختم داخل پروژه asp.net توسط mvc5
و ویو هایی ک برای هر موجودیت دیتابیس ساختم
چطور میتونم بین این دوتا ارتباط بدم؟
پروژه ساخت یک سامانه هست

کیوان علی محمدی

اگه با mvc ساخته باشین به راحتی در کنترلر می تونید مشخص کنید چه فایل view نمایش داده بشه و تمام داده ها رو به اون view ارسال کنید و نمایش بدین.

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.