2014-12-02 2 views
1

я развиваю свой сайт с помощью ASP.NET MVC 5 в Visual Studio 2013. Теперь, проект имеет несколько контроллеров, которые связаны и являются, как это (* представляет подробности/Index/Редактировать/Удалить):Как я могу переписать свой URL-адрес контроллера?

Current URL     Desired URL 
/Billing/     /Billing 
/BillableItems/    /Billing/BillableItems 
/Customers     /Billing/Customers 
/Bills      /Billing/Bills 
/BilledItems     /Billing/BilledItems 

Это похоже на то, потому что упрощающий шаблон проекта допускает только это. ОДНАКО, поскольку эти элементы связаны с выставлением счетов, я хотел бы сгруппировать их как один, чтобы URL-адреса диспетчера биллинга выглядели так, как если бы существовали субконтроллеры для каждого из объектов.

ответ

1

два варианта:

  1. Использование области. Если вы создаете область в своем проекте под названием Billing, вы можете поместить все эти связанные контроллеры в эту область, и все URL-адреса будут иметь префикс имени области «Биллинг».

  2. Использовать настраиваемые маршруты или маршрутизацию атрибутов. Маршрутизация атрибутов намного проще и встроена, поскольку вы используете MVC5. Просто префикс своих контроллеров [RoutePrefix("Billing/[ControllerName]"]. Например, с вашими CustomersController:

    [RoutePrefix("Billing/Customers")] 
    public class CustomersController : Controller 
    

    Вы, конечно, необходимо включить атрибут маршрутизации для этой работы и применить правильный маршрут атрибуты действий в контроллере (ов). См. Attribute Routing in ASP.NET MVC 5 для получения дополнительной информации.

    С традиционной маршрутизации вам просто нужно настроить маршрут для каждого из контроллеров:

    routes.MapRoute(
        name: "Customers", 
        url: "Billing/Customers/{action}/{id}", 
        defaults: new { controller = "Customers", action = "Index", id = UrlParameters.Optional } 
    ); 
    

    Remember поместить те маршруты , прежде чем маршрут по умолчанию, чтобы они поймать первый.

Смежные вопросы