مسیریابی در ASP.NET MVC
مسیریابی در ASP.NET MVC بحث بسیار با اهمیتی می باشد. چرا که توسط مسیریابی، درخواست ها به کنترلر و رویدادهای مشخص شده فرستاده خواهد شد. تمامی مسیرهای موجود در MVC در فایل Global.asax قرار گرفته است. در داخل این فایل رویداد Application _ Start تعریف شده است. دستوراتی در ارتباط با مسیریابی در این متد وجود دارد که
RouteConfig.RegisterRoutes یکی از این دستورات است. متد .RegisterRoutes مربوط به کلاس RouteConfig است که ما را به مسیرهای موجود در برنامه راهنمایی می کند. اگر به سراغ پوشه App_Start بروید در آنجا این فایل را مشاهده خواهید کرد. مسیرهای پیش فرض برنامه و مسیرهای سفارشی در این فایل تعریف شده است (شکل زیر).
توسط متد MapRoute موجود در این فایل مسیرها در برنامه تعریف خواهند شد.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = ("Home", action = "Index", id
= UrIParameter.Optional }
);
}
در ادامه قصد داریم نحوه ایجاد مسیرهای سفارشی را آموزش دهیم. برای بسیاری از برنامه های ASP.NET MVC، مسیر پیش فرض تعریف شده در داخل این فایل کافی است و نیازی به تعریف مسیرهای سفارشی نیست. ولی در بعضی از موارد نیاز به تعریف مسیرهای خاص هست. به عنوان مثال در یک برنامه کاربردی که نیاز به پردازش یک درخواست ورودی با فرمت تاریخ می باشد باید از مسیرهای سفارشی استفاده کرد.
در ادامه با ارائه یک مثال نحوه ایجاد مسیر سفارشی را آموزش خواهیم داد. فرض کنید در برنامه ای نیاز به پردازش یک تاریخ ورودی دارید. برای این منظور ابتدا باید کنترلر مربوطه و رویداد پردازش تاریخ را ایجاد کنید. کنترلر با نام Archive ایجاد کرده و رویداد ذیل را در برنامه وارد کنید:
using System;
using system.Web.Five;
namespace MvcApplication1.Controllers
{
public class ArchiveController : Controller
{
public string Entry(Datetime entryDate)
{
return "You requested the entry from " + entryDate.ToString();
}
}
}
همانطور که در دستورات بالا مشاهده می کنید پارامتر ورودی متد Entry از نوع تاریخ تعریف شده است. MVC تا اندازه ای برای پردازش ورودی تاریخ به صورت هوشمندانه عمل می کند. اگر پارامتر ورودی می شود. url قابل تبدیل به فرمت تاریخ باشد این تبدیل انجام خواهد شد و در غیر این صورت برنامه دچار خطا این فایل کنید.
حال باید به سراغ فایل RouteConfig رفته و دستورات زیر را جایگزین متد RegisterRoutes این فایل کنید.
در اینجا دو مسیر یکی با نام Blog و دیگری Default تعریف شده است. در این متد ترتیب قرار گرفتن مسیرها بسیار با اهمیت است. همان طور که در دستورات بالا مشاهده می کنید مسیر سفارشی Blog قبل از مسیر پیش فرض اضافه شده است. اگر جای این دو مسیر را عوض کنیم و مسیر پیش فرض را در ابتدا تعریف کنیم مسیر پیش فرض همیشه در ابتدا فراخوانی خواهد شد.
بنابراین هر درخواستی که با آدرس /Archive شروع میشود مورد تأیید مسیر سفارشی ایجاد شده Blog می باشد:
/Archive/12-25-2009 Archive/10-6-2004
Archive/apple
اس های ورودی توسط مسیر سفارشی Blog به رویداد مربوط به Entry متعلق به controller با نام Archive فرستاده خواهد شد. در زمان فراخوانی متد Entry، پارامتر تاریخ ورودی به متد entry داده میشود. همچنین می توان از این مسیر سفارشی در کنترلر استفاده کرد.
همان طور که در دستورات بالا قابل مشاهده است پارامتر ورودی متد Entry از نوع تاریخ تعریف شده است. MVC به صورت خودکار تاریخ ورودی آدرس را به پارامتر ورودی متد پاس خواهد داد. اگر پارامتر ورودی درخواست از نوع تاریخ تعریف نشده باشد پیغام خطایی رخ خواهد داد.
سلام خسته نباشید
url من به صورت زیر است
/آموزش-نرم-افزار/http://localhost:1471/Home/Index
میخوام به شکل زیر تغیر بدم
/آموزش-نرم-افزار/http://localhost:1471
چیکار کنم ؟
لطفا کمکم کنید
سلام ممنونم
خب برای اینکار شما میتوانید به controller و action ، یک مقدار default بدهید و آنها را optional کنید ینی در route آنهارا داخل کروشه همراه با علامت سوال قرار دهید دقیقا مانند روت دوم در عکس بالا
[Route(“person/{name}/{family?}”)]
با سلام
فرض کنیم url بصورت زیر است:
http://localhost:31723/direct/management/membership
direct : نام area
management : نام controller
membership : نام view
سوالی که مطرحه اینه که چطور میتونیم نام controller رو توی url مخفی کنیم تا خروجی کار به شکل زیر باشه:
http://localhost:31723/direct/membership
ممنون میشم راهنمایی کنید
سلام
شما باید در فایل global.asax یک روت جدید add کنید بالا تر از روت Default مانند زیر :
routes.MapRoute(“SpecificRoute”, “{action}/{id}”, new {controller = “management “, action = “Index”, id = UrlParameter.Optional});
// default route
routes.MapRoute(“Default”, “{controller}/{action}/{id}”, new {controller = “Home”, action = “Index”, id = UrlParameter.Optional} );
بعد بالای اکشن ، نام روت را مشخص کنید مثل زیر :
[Route(“SpecificRoute”)]
public ActionResult MyAction()
{
…
}