ورود ثبت نام

ورود به حساب کاربری

نام کاربری *
رمز ورود *

ایجاد حساب کاربری

گزینه های * دار الزامی می باشند.
نام *
نام کاربری *
رمز ورود *
تائیدیه رمز ورود *
نشانی پست الکترونیک *
تائیدیه پست الکترونیک *

در ASP.NET Core مسیریابی از طریق تعریف مجموعه ای از route ها انجام می گیرد و هر یک از این route ها در حقیقت شمایی از آدرس URL ای است که برنامه شما به آن پاسخ می دهد. ما نیاز به تعریف همه‌ی این آدرس ها نداریم و الگوهایی را در برنامه تعریف می کنیم که با رسیدن هر درخواست آدرس آن با الگوی تعریف شده مطابقت داده می شود و در صورت تایید مسیریابی صورت می گیرد.

هر URL به قسمتهای کوچکتری مطابق با شکل زیر شکسته می شود:

 

قسمت اول در بر گیرنده نام سایت می باشد. قسمت دوم که درشکل کلمه Admin است در حقیقت نام کنترلر و قسمت آخر که در اینجا Index است نام action کنترلر مربوطه می باشد. در نتیجه الگوی قابل تعریف برای URL بالا به این صورت خواهد بود:

 

زمانیکه درخواست HTTP به سرور می رسد، job مربوط به سیستم مسیریابی الگوی URL رسیده را با الگوهای تعریف شده و بر اساس قسمتهای موجود در آن تطبیق می دهد و در صورت یکسان بودن مسیر مورد نظر را واکشی می نماید. قسمتهای موجود در یک الگو با استفاده از براک ({}) مشخص می شوند . در جدول زیر نمونه هایی از این تعاریف آمده است:

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

namespace UrlsAndRoutes { 
       public class Startup { 
           public void ConfigureServices(IServiceCollection services) {
             services.AddMvc();
         } 
           public void Configure(IApplicationBuilder app) {
             app.UseStatusCodePages();
             app.UseDeveloperExceptionPage();
             app.UseStaticFiles();
              app.UseMvc(routes => { 
                  routes.MapRoute(name: "default", template: "{controller}/{action}"); 
              }); 
         }
     }
 }

مسیر تعریف شده با استفاده از عبارتهای منظم lambda به عنوان آرگومان ورودی به متد UseMvc ارسال می شود. عبارت دریافت شده شیئی از اینترفیس IRouteBuilder را پیاده سازی می نماید و متد MapRoute مسیرها را تعریف می نماید. برای تعریف مسیر پیش فرض برنامه می توان از فرمت زیر استفاده نمود. در این مثال کنترلر home و action  با نام Index به صورت پیش فرض و با رجوع به آدرس سایت انتخاب می شود.

app.UseMvc(routes => { 
                  routes.MapRoute( 
                      name: "default",  
                  template: "{controller}/{action}", 
                      defaults: new { controller=”Home” , action = "Index" }); 
              });  

این تعریف را به صورت Inline و به شکل زیر نیز می توان انجام داد:

 

app.UseMvc(routes => {
                 routes.MapRoute(
                     name: "default",
                      template: "{controller=Home}/{action=Index}”); 
             });

با تعریف چنین الگویی برای مسییابی طبق جدول زیر هر یک از URLهای وارد شده به صورت بیان شده در ستون Maps To تفسیر می شوند:

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

برای این کار کافی است که قسمت ثابت را در الگو بیاوریم.

 

app.UseMvc(routes => {
                 routes.MapRoute(
                     name: "default",
                     template: "{controller=Home}/{action=Index}"); 
                    routes.MapRoute(name: "", 
                      template: "Public/{controller=Home}/{action=Index}"); 
             });

اگر بخواهیم یک عبارت به قبل از نام کنترلر در الگوی URL تعریف شده اضافه شود باید به اینصورت انجام دهیم:

routes.MapRoute("", "X{controller}/{action}");

در این حالت دسترسی به یک action از کنترلر به شکل زیر خواهد بود:

تعریف segment variable:

گاهی اوقات برای درج اطلاعات در آدرس URL نیاز به تعریف متغیرهای سفارشی در الگوی مسیریابی است. به طور مثال برای درج متغیر id سگمنت جدیدی به الگوی مسیر اضافه می شود و در صورت نبود آن متغیر در URL وارد شده از مقدار پیش فرض آن استفاده می شود. قطعه کد زیر نحوه انجام این کار را بیان می کند:

app.UseMvc(routes => {
                  routes.MapRoute(name: "MyRoute", 
                      template: "{controller=Home}/{action=Index}/{id=10}”); 

در کد بالا آدرس /Homd/Index باعث ارجاع به action، Index از کنترلر Home شده و مقدار پیش فرض 10  را به پارامتر ورودی آن با نام id ارسال می کند و آدرس /Home/Index/25 مقدار 25 را برای id  ارسال می نماید.

برای اینکه مقدار سگمنت سفارشی تعریف شده برای الگو حالت انتخابی (optional) داشته باشد کافی است آنرا به صورت زیر تعریف نماییم:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller=Home}/{action=Index}/{id?}"); 
             });

در این حالت باید  پارامتر ورودی  action نیز از نوع optional باشد.

تعریف Route با طولهای متغیر

در این حالت هر تعداد سگمنت در انتهای آدرس URL می تواند آورده شود و  همه این سگمنتها در حقیقت لیستی از مقادیر برای متغیر تعریف شده در root هستند.

 

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller=Home}/{action=Index}/{id?}/{*catchall}"); 
             });

در اینجا هر چیزی بعد از id بیاید از مقادیر متغیر catchall می باشد. جدول زیر چند نمونه از تفسیر نمونه های مختلف در این الگو را نشان می دهد:

تعریف قید در الگوی مسیر

برای تعریف این قید کافی است نوع به صورت زیر در الگو آورده شود:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller=Home}/{action=Index}/{id:int?}"); 
             });

در این حالت در صورتی که مقدار درج شده برای id  از نوع عدد صحیح باشد به action ارسال می شود و در غیر اینصورت مقدار NULL برای آن تفسیر و به action ارسال می گردد.

جدول زیر انواع قیدهای قابل تعریف در مسیریابی آورده شده است:

به عنوان نمونه برای ایجاد محدودیت در الگو به صورتی که اگر به جای نام کنترلر هر عبارتی که با H شروع شود وارد شد را بخواهیم به کنترلر Home تفسیر نماییم به این صورت الگو را تعریف می نماییم:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller:regex(^H.*)=Home}/{action=Index}/{id?}"); 
             });

مثال دیگر اگر بخواهیم آدرسهای حاوی action با نام Index  و About هر دو به Index برگردانده شوند به این صورت تعریف می نماییم:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                    template: "{controller:regex(^H.*)=Home}/" 
                      + "{action:regex(^Index$|^About$)=Index}/{id?}"); 
             });

مثال سوم برای تعریف قید، اعمال محدودیت برای متغیر سفارشی است و در آن دامنه مقادیراین متغیر تعیین شده است:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller=Home}/{action=Index}/{id:range(10,20)?}");
});

مثال چهارم تعیین محدودیت نوع رشته ای و تعداد کاراکتر برای متغیر است که در زیر آورده شده است:

app.UseMvc(routes => {
                 routes.MapRoute(name: "MyRoute",
                      template: "{controller=Home}/{action=Index}" 
                          + "/{id:alpha:minlength(6)?}"); 
             });

تعریف مسیریابی به روش Attribute Routing

برای اینکار در متد Configure کلاس Startup پروژه دستور زیر را وارد کرده و در بالای هر action و کنترلر الگوی مسیریابی را تعریف می نماییم:

  app.UseMvcWithDefaultRoute();

به مثال زیر در این مورد توجه کنید:

[Route("app/[controller]/actions/[action]/{id?}")] 
     public class CustomerController : Controller {
…
}

در جدول زیر نمونه هایی از تفسیر آدرسهای الگوی بالا آمده است:

   

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید