Вопросы по маршрутизации ASP.NET MVC

Я только начал использовать ASP.NET MVC, и у меня есть два вопроса о маршрутизации.

  1. Как настроить следующие маршруты в ASP.NET MVC?

    domain.com/about-us/
    domain.com/contact-us/
    domain.com/staff-bios/

    Я не хочу указывать контроллер в фактическом URL-адресе, чтобы URL-адреса были короче. Если URL-адреса выглядели так:

    domain.com/company/about-us/
    domain.com/company/contact-us/
    domain.com/company/staff-bios/
    

    для меня это будет иметь больше смысла, так как я могу добавить CompanyController и настроить ActionResults для about-us, contact-us, staff-bios и возвращать соответствующие представления. Что мне не хватает?

  2. Какое назначение имеет имя "Default" в правиле маршрутизации по умолчанию в Global.asax? Он для чего-нибудь используется?

Спасибо!


person Community    schedule 23.07.2009    source источник


Ответы (3)


Сначала я отвечу на ваш второй вопрос - «По умолчанию» - это просто название маршрута. Это можно использовать, если вам когда-нибудь понадобится обратиться к маршруту по имени, например, когда вы хотите создать URL-адрес из маршрута.

Теперь для URL-адресов, которые вы хотите настроить, вы можете обойти параметр контроллера, если вы согласны с тем, что всегда указываете один и тот же контроллер по умолчанию. Маршрут может выглядеть просто так:

{action}/{page}

Убедитесь, что он объявлен после других ваших маршрутов, потому что он будет соответствовать большому количеству URL-адресов, которые вы не собираетесь использовать, поэтому вы хотите, чтобы другие маршруты сначала взломали его. Настройте это так:

routes.MapRoute(null, "{action}/{page}", 
                 new { controller = "CompanyController", action = "Company", page = "contact-us" } );

Конечно, ваш метод действия «Company» в вашем контроллере MyDefault должен иметь параметр «string page», но это должно помочь вам. Метод вашей компании просто проверит, существует ли View для любого параметра страницы, вернет 404, если его нет, или вернет View, если он существует.

person womp    schedule 23.07.2009

Говоря о настройке маршрутов и Фила Хаака, я нашел его Route Отладчик неоценим. Это отличный инструмент, когда вы не понимаете, почему определенные маршруты используются вместо других, или когда не учитесь создавать особые сценарии маршрутизации (например, тот, который вы упомянули). Это помогло мне прояснить многие тонкости создания маршрутов больше, чем любой другой ресурс.

person jamesmillerio    schedule 23.07.2009

Чтобы ответить на ваш второй вопрос о Global.asax, это необязательный файл, используемый для ответа на события уровня приложения и уровня сеанса, вызванные модулями ASP.NET или HTTP. Файл Global.asax находится в корневом каталоге приложения ASP.NET. Если вы не определили его, предполагается, что вы не определили какой-либо обработчик приложения или обработчика сеанса. Платформа MVC использует механизм маршрутизации, для которого в механизме определены правила маршрутизации, чтобы сопоставить входящий URL-адрес с правильным контроллером.
Из контроллера вы можете получить доступ к ActionName. Если нет конкретного контроллера, он перейдет на страницу по умолчанию. Контроллер по умолчанию - «Домашний» с его действием по умолчанию «Индекс». Обратитесь к MSDN:

http://msdn.microsoft.com/en-us/library/2027ewzw%28v=vs.100%29.aspx

Обратитесь к вопросу о stackoverflow

Для чего используется global.asax?

Это пример того, как должен выглядеть маршрут по умолчанию.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = 
  UrlParameter.Optional }
        );
person Dexter    schedule 16.02.2018