У меня есть проблема с маршрутизацией, RouteConfig.cs
содержит следующие маршруты:Один ASP.NET MVC маршрут не работает
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"TermsOfService",
"termsofservice",
new { controller = "Home", action = "TermsOfService" }
);
routes.MapRoute(
"PrivacyPolicy",
"privacypolicy",
new { controller = "Home", action = "PrivacyPolicy" }
);
routes.MapRoute(
"Contact",
"contact",
new { controller = "Home", action = "Contact" }
);
routes.MapRoute(
"Support",
"support",
new { controller = "Home", action = "Support" }
);
routes.MapRoute(
"ReadOurStory",
"readourstory",
new { controller = "Home", action = "ReadOurStory" }
);
routes.MapRoute(
name: "BlogItem",
url: "blog/{name}",
defaults: new { controller = "Home", action = "BlogItem" }
);
routes.MapRoute(
name: "ProductDetail",
url: "products/{name}",
defaults: new { controller = "Home", action = "Product" }
);
routes.MapRoute(
name: "Products",
url: "products",
defaults: new { controller = "Home", action = "Products" }
);
routes.MapRoute(
name: "Tutorials",
url: "tutorials",
defaults: new { controller = "Home", action = "Tutorials" }
);
routes.MapRoute(
name: "Blog",
url: "blog",
defaults: new { controller = "Home", action = "Blog" }
);
routes.MapRoute(
name: "TutorialDetail",
url: "tutorials/{name}",
defaults: new { controller = "Home", action = "Tutorial" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
и эти два действия в HomeController
:
public ActionResult Products()
{
var model = LoadItemsModel(ItemType.Product);
return View(model);
}
public ActionResult Tutorials()
{
var model = LoadItemsModel(ItemType.Tutorial);
return View(model);
}
Теперь ссылка для продуктов работая:
http://localhost:61296/products/
, но ссылка на учебные пособия:
http://localhost:61296/tutorials/
возвращается ошибка
Ошибка HTTP 403.14 - Forbidden
Веб-сервер настроен не перечислить содержимое этого каталога
Я попытался изменить маршрут только для теста на tutorials2
, и действие до Tutorials2
, а затем эта измененная ссылка работает. Я не знаю, почему маршрут tutorials
не работает.
Вы действительно идете против соглашений ASP.NET MVC, делая это таким образом. Каждый контроллер уже настроен для перехода на действие «Index» каждого контроллера на основе имени контроллера. Создайте контроллер под названием «TutorialsController», а существующий маршрут (последний маршрут) автоматически переместится в действие «Index» этого контроллера. Вам не нужно настраивать отдельный маршрут для каждого из них с такими жесткими закодированными значениями. – Luke