2016-12-08 6 views
0

Я знаю о маршрутизации в MVC. Я добавил новый MapRoute под метод RegisterRoute в классе RouteConfig.cs и успешно вызвал свою функцию с URL-адресом http://localhost:53363/package/PackageDetail/mypackage/5.URL-адрес маршрутизации MVC 5 Asp.net

Однако, мой вопрос заключается в том, что я должен добавить разные маршруты карт для каждого метода или есть лучший способ? Как и в классе PackageController вы можете увидеть у меня есть два метода один методы занимают PackageId и PackageName, а другие принимают только PackageId. Так что я должен регистрировать разные маршруты карт или нет?

RouteConfig

 public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
      name: "Package", 
      url: "Package/PackageDetail/{packageName}/{packageId}", 
      defaults: new { controller = "Package", action = "PackageDetail", packageName = UrlParameter.Optional, packageId = UrlParameter.Optional } 

     ); 

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

PackageController.cs:

 [HttpGet] 
     public ActionResult PackageListing(int packageId = 0) 
     { 

      return View(); 
     } 

     [HttpGet] 
     public ActionResult PackageDetail(string packageName = "", int packageId = 0) 
     { 

      return View(); 
     } 
+0

Попробуйте использовать маршрутизацию атрибутов в MVC 5 [link] (https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/) –

+0

@MuhammedShevilKP отлично это то, что я искал. Положите это как ответ, чтобы я мог его принять. –

ответ

0

Если вы хотите переопределить URL по умолчанию маршрут и создать пользовательский URL, то вам нужно маршрут в маршрут конфиге регистре.

Вы можете передать имя пакета и идентификатор пакета, как показано ниже.

http://sitename/Package/PackageListing?packageId=1 

http://sitename/Package/PackageDetail?packageName=packagename&packageId=1 

, но если вы хотите создать URL-адрес ниже, чем вам нужно добавить маршрут в файл route.config.

http://sitename/Package/PackageListing/1 

http://sitename/Package/PackageDetail/packageName/1 
1

Несмотря на то, что ответ Мухаммеда будет работать, это очень повторяющиеся, особенно если вы используете один и тот же стиль маршрутов для нескольких типов.

Перед тем, как решить один подход к маршрутизации, необходимо рассмотреть несколько вещей. Главное, почему есть имя и идентификатор в маршруте? Если вы хотите создать более удобную для SEO структуру URL-адресов, вообще не докучайте идентификатор.

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

Однако, если у вас есть несколько разных контроллеров (или действий) с аналогичной структурой имени/идентификатора маршрутов, вам будет гораздо лучше обслуживаться с тем, чтобы ваш пользовательский маршрут был более общим.

routes.MapRoute(
    name: "NameAndId", 
    url: "{controller}/{action}/{name}/{id:int}", 
    defaults: new 
     { 
      controller = "Package", 
      action = "PackageDetail", 
      name = UrlParameter.Optional, 
      id = UrlParameter.Optional 
     }); 

Держите это выше маршрут по умолчанию, и это будет перенаправлять не только

/Package/PackageDetail/Deluxe/5 

, но и позволит вам иметь такие вещи, как это:

/Meals/Menu/Dinner/3 

Это не обязательно может быть применимо для вас в этом проекте, но так как вы изучаете MVC, это хороший навык для подбора. Чем больше вы сможете поддерживать определения маршрута, тем меньше вам нужно будет повторить его. Конечно, если это одноразовый специальный маршрут, нет ничего плохого в использовании атрибутов.

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