مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

iman7107

عضویت از 1395/01/15

حذف Index از url ها

  • سه شنبه 2 مرداد 1403
  • 10:24
تشکر میکنم

سلام. وقت بخیر.

من یه سایت با ASP.Net MVC5 دارم. میخوام این لینک ها رو داشته باشم:

www.domain.com/Products

www.domain.com/Products/My-Software

چطور میتونم Route و Controller و Action رو تعریف کنم؟

من یه کنترلر Products تعریف کردم. که اکشن Index داره که یه ورودی id میگیره. تو فایل RouteConfig هم اینو نوشتم:

            routes.MapRoute(
                name: "Products",
                url: "Products/{id}",
                defaults: new { controller = "Products", action="Index", id = UrlParameter.Optional }
            );

مشکل اینه که  لینک با Index هم وجود خواهد داشت. یعنی با این کار لینک های زیر درست هستن:

www.domain.com/Products

www.domain.com/Products/My-Software

ولی لینک 

www.domain.com/Products/Index/My-Software 

رو هم داریم که برای سئو به دلیل Duplicate Content مشکل ایجاد میکنه. یعنی دو تا لینک داریم با یک محتوا. چطور میتونم کلا Index رو از Url ها حذف کنم؟ احتمالا باید یه تغییراتی تو Route بدم و یه تغییراتی تو کنترلر. ممنون میشم دوستانی که اطلاعات دارن، کمک کنن.

پاسخ های این پرسش

تعداد پاسخ ها : 1 پاسخ
کاربر سایت

Hellgate

عضویت از 1396/08/28

  • یکشنبه 8 مهر 1403
  • 17:44

سوال شما چون دقیق نیست چندین حالت میشه اینکاری که میخای رو انجام بدید 

قبل از ارائه راه حل باید بگم که در نامگذاری اسم action ها اشتباه هست که خط تیره بگذارید یعنی MySoftware به این شکل می بایست باشد.

راه حل ها 

1- اگر بخای بر اساس همین map controller route که نوشتی انجام بشه می بایست داخل controller ، Products یک اکشن به نام MySoftware  بسازی ومتناسب با همین نام view آن را درست کنی و این تنظیمات رو انجام بدی

routes.MapRoute(
                name: "Products",
                url: "Products/{id}",
                defaults: new { controller = "Products", action="MySoftware", id = UrlParameter.Optional }
            );

راه حل دوم اینه که میتونی هم Home controller داشته باشی و هم این mapping که نیاز داری باشه به این صورت

routes.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
routes.MapControllerRoute(
    name: "Products",
    pattern: "{controller=Products}/{action=MySoftware}/{id?}");

که هردو به شکل کاملا صحیح کار میکند.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)