2016-09-19 4 views
0

У меня есть проблема с маршрутизацией, 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 не работает.

+1

Вы действительно идете против соглашений ASP.NET MVC, делая это таким образом. Каждый контроллер уже настроен для перехода на действие «Index» каждого контроллера на основе имени контроллера. Создайте контроллер под названием «TutorialsController», а существующий маршрут (последний маршрут) автоматически переместится в действие «Index» этого контроллера. Вам не нужно настраивать отдельный маршрут для каждого из них с такими жесткими закодированными значениями. – Luke

ответ

3

Основываясь на этой ошибке, я предполагаю, что у вас есть физический каталог в папке проекта, называемый «учебники». Любые физические файлы/каталоги всегда будут отменять любые маршруты. Затем, поскольку список каталогов по умолчанию отключен, вы получаете ошибку 403. Удалите или переименуйте физический каталог, и все будет в порядке.

+0

Да, это было, большое спасибо. –