سلام. وقت بخیر.
من یه سایت با 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 بدم و یه تغییراتی تو کنترلر. ممنون میشم دوستانی که اطلاعات دارن، کمک کنن.
سوال شما چون دقیق نیست چندین حالت میشه اینکاری که میخای رو انجام بدید
قبل از ارائه راه حل باید بگم که در نامگذاری اسم 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?}");
که هردو به شکل کاملا صحیح کار میکند.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)