Хобрук: Ваш путь к мастерству в программировании

Проблема сопоставления маршрутов URL-адресов ASP.NET MVC (перезапись URL-адресов)

Вот моя структура папки .Net MVC:

скриншот

У меня есть отдельная папка под названием «Площадь», а внутри нее - папка под названием «Ресторан». Внутри этой папки «Ресторан» у меня есть контроллер с именем «MenuController», у которого есть действие «Индекс».

Я пытаюсь переписать URL-адрес (Custom Route Mapping) внутри «Global.asax.cs», используя следующий код.

routes.MapRoute(
                "RestaurantMenu", // Route name
                "Restaurant/{id}", // URL with parameters
                new { controller = "/Restaurant/Menu", action = "Index", id = UrlParameter.Optional }
                // Parameter defaults
                );

Но это дало мне ошибку HTTP 404.


Ответы:


1

Параметр контроллера внутри вашего маршрута должен быть именем контроллера, а не путем:

Если имя вашего контроллера Menu, измените его так:

routes.MapRoute(
    "RestaurantMenu", // Route name
    "Restaurant/{id}", // URL with parameters
    new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
    // Parameter defaults
);

И еще одна странная вещь: находится ли этот маршрут внутри вашего файла Global.asax? Он должен находиться внутри вашего файла RestaurantAreaRegistration.cs следующим образом:

public class RestaurantAreaRegistration : AreaRegistration {

    public override string AreaName {
        get {
            return "Restaurant";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) {

        context.MapRoute(
              "RestaurantMenu", // Route name
              "Restaurant/{id}", // URL with parameters
              new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
             // Parameter defaults
        );

        context.MapRoute(
            "Accommodation_default",
            "accomm/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

    }
}

тогда вы можете дать этому шанс. Если вы хотите использовать ActionLink с этим маршрутом, используйте его так:

@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"})

Я написал приведенный выше код с помощью блокнота, поэтому возможны опечатки :)

06.09.2011
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..