دسته بندی ها
20:36 1398/12/18

تفاوت در استفاده از endpoints و routes جهت مسیردهی صفحه های پروژه

مشخصات سوال کننده :
کاربر : ghasem110deh     امتیاز کاربر : 0     رتبه کاربر : 7059
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3141
هوش مصنوعی

پاسخ هوش مصنوعی

در ASP.NET Core 3.1 و نسخه های بعدی، استفاده از endpoints به جای routes در مسیردهی، تغییرات مهمی به همراه دارد. در اینجا چند نکته برای توضیح این تغییرات و چگونگی استفاده از آن ها ارایه می شود:

1. **ساختار جدید**: در نسخه های جدید ASP.NET Core، API جدیدی به نام Endpoints معرفی شده که به شما اجازه می دهد تا مسیردهی را با استفاده از MapControllerRoute و سایر متدها سازماندهی کنید. این کار به شما امکان می دهد که کدهای خود را واضح تر و قابل مدیریت تر نمایید.

2. **ترتیب مسیردهی**: یکی از نکات کلیدی در استفاده از endpoints این است که ترتیب تعریف مسیرها (routes) مهم است. اگر شما مسیری را بعد از مسیری دیگر قرار دهید که ممکن است به آن مسیر اشاره کند، احتمال اینکه مسیر اول پیدا نشود وجود دارد. بنابراین، ترتیب تعریف مسیرهای شما باید طوری باشد که مسیرهای خاص تر قبل از مسیرهای عمومی تر قرار گیرند.

3. **مسیردهی به Areas**: اگر شما از Areas در پروژه خود استفاده می کنید، باید مطمین شوید که مسیر مربوط به area برای درخواست های صحیح تعریف شده اند. اطمینان حاصل کنید که نام area با نام درون Areas شما مطابقت داشته باشد و همچنین اطمینان حاصل کنید که مسیری که مربوط به area است، قبل از دیگر مسیرها تعریف شده باشد.

4. **نمونه کد**: برای ایجاد یک مسیردهی درست برای Areas، می توانید از کد زیر استفاده کنید:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "areas",
        pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

با رعایت ترتیب تعریف مسیرها و استفاده صحیح از Endpoints، باید بتوانید مسیردهی به صفحات پروژه تان را به راحتی انجام دهید و مشکلات 404 را حل کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 02:24 1398/12/25

سلام. بله در نسخه Core 3 به بعد میان افزار مربوط به Routing نسبت به نسخه های قبلی کمی تفاوت داشته ولی مدل و ترتیب آدرس دهی تغییری نداشته در مجموع.

در Asp.net core 3 سیستم مسیردهی یا Routing قدری تغییرا داشته و اختصاصی تر شده. شما برای تعریف مسیر و همچنین برای ایجاد مسیر مورد نظر خودتون برای Area باید به شکل زیر عمل کنید

 

    app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

            //For Area
            app.UseEndpoints(routes =>
            {
                routes.MapAreaControllerRoute(
                  name: "AdminPanel",
                  areaName: "AdminArea",
                  pattern: "{area:exists}/{controller=AdminHome}/{action=Index}/{id?}");
            });

 

همونطور که مشاهده می کنید برای تعریف مسیرهای عادی از MapControllerRoute و برای تعریف مسیر Area از MapAreaControllerRoute استفاده میشه. همچنین متد MapAreaControllerRoute دارای 3 متغیر به نام name و areaName و pattern هست که باید مقداردهی بشه.

موفق باشید.

 

این لینک رو هم میتونید بخونید.

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
پاسخ دهنده : mohammad-i 11:53 1398/12/25

نیازی نیست دو یا چند بار از

app.UseEndpoints

 استفاده کنید. شما یه بار app.UseEndpoints رو تعریف میکنید و بعد به تعداد دلخواه endpoint میسازید.

و همچنین هم برای مسیر عادی و هم Area میتونید از MapControllerRoute  استفاده کنید. اینجوری کد نویسی سادهتر و تمیزتره.

اینم نمونه اش:

app.UseEndpoints(endpoints =>
            {
                //------Route For Areas-----------------
                endpoints.MapControllerRoute(
                    name: "areaRoute",
                    pattern: "{area:exists}/{controller}/{action}",
                    defaults: new { controller = "Home", action = "Index" });

                //------Default Route-----------------
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action}/{id?}",
                    defaults: new { controller = "Home", action = "Index" });


            });

 

به این پاسخ امتیاز بدهید    1
امتیاز: 260 رتبه: 7
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود