2015-12-10 4 views
0

Привет У меня есть проблема с маршрутами в плагине, в nopcommerce 3,6Nopcommerce RegisterRoutes

Я имею в папке Controller TestPohodaController.cs содержит метод ImportProductInfo()

Существует мои RegisterRoutes:

namespace Nop.Plugin.Test.Pohoda 
{ 
    public partial class RouteProvider : IRouteProvider 
    { 
     public void RegisterRoutes(RouteCollection routes) 
     { 
      routes.MapRoute("Plugin.Test.Pohoda.ImportProductInfo", 
        "Plugins/TestPohoda/ImportProductInfo", 
        new { controller = "TestPohoda", action = "ImportProductInfo" }, 
        new[] { "Nop.Plugin.Test.Pohoda.Controllers" } 
      ); 
     } 
     public int Priority 
     { 
      get 
      { 
       return 0; 
      } 
     } 
    } 
} 

Установка в nopCommerce в порядке, но когда я перехожу на страницу mypage/Plugins/TestPohoda/ImportProductInfo return 404.

Мне нужен URL-адрес Tes tPohodaController для вызова этого контроллера из экономической системы. Не могли бы вы мне помочь, пожалуйста? Благодарю.

+0

показать контроллер. Если вы используете настраиваемый просмотр, тогда обязательно укажите правильный путь просмотра или просто верните полный путь к представлению, подобному этому, в методе результата действия «return View» («~/Plugins/Your_Plugin_Name/Views/TestPohoda/ImportProductInfo.cshtml ");' –

ответ

0

ASP.NET MVC Routing оценивает маршруты сверху донизу. Таким образом, если два маршрута совпадают, первый из них попадает (тот, который ближе к «вершине» метода RegisterRoutes) будет иметь приоритет над последующим.

Имея это в виду, что вам нужно сделать две вещи, чтобы исправить вашу проблему:

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

example.com/1 и

example.com/index Для синтаксического анализа, они содержат одинаковое количество сегментов, и нет никакого отличия, поэтому он будет ударять по первому маршруту в списке, который соответствует.

Чтобы исправить это, вы должны убедиться в том, что маршруты, которые используют ProductIds принять ограничения:

routes.MapRoute(
"TestRoute", 
"{id}", 
new { controller = "Product", action = "Index3", id = UrlParameter.Optional }, 
new { id = @"\d+" } //one or more digits only, no alphabetical characters 
); 
+0

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

+0

Я просто даю ему пример – coder771

+0

, который вы даете это как ответ (вы должны прочитать термины и условия SO) на свой вопрос, и ваш ответ не совсем правильный. Определенный вами маршрут абсолютно неверен, поскольку у вас нет определенного URL-адреса, но только необязательный параметр. эта платформа призвана помочь людям решить их конкретные проблемы. Не вводить их в заблуждение ложной или нерелевантной информацией. Вы также дали мне право голоса только потому, что я дал вам справедливое голосование. это даже не этика. Ваша цель здесь не должна быть просто для того, чтобы получить дополнительные очки, но чтобы помочь людям. – batmaci

0
  • Вам не нужно начинать с плагинов для вашего маршрута URL. достаточно , чтобы следовать этому шаблону {controller}/{Action}/{parameter}
  • Убедитесь, что пространство имен для контроллера правильное, так как вы определяете в маршрутизации. Nop.Plugin.Test.Pohoda.Controllers
  • Вы также можете указать необязательный параметр productId. так что это будет работа для MYPAGE/TestPohoda/ImportProductInfo или MyPage/TestPohoda/ImportProductInfo/123
  • Вы также можете установить приоритет выше, чем 0, который является приоритетом routeprovider по умолчанию в nop.web. таким образом, вы убедитесь, что ваш плагин читает его первым. В действительности это не обязательно, поскольку у вас есть специфический URL. это требуется только если у вас есть подобный маршрут URL

Попробуйте использовать этот маршрут

namespace Nop.Plugin.Test.Pohoda 
    { 
     public partial class RouteProvider : IRouteProvider 
     { 
      public void RegisterRoutes(RouteCollection routes) 
      { 
       routes.MapRoute("Plugin.Test.Pohoda.ImportProductInfo", 
         "TestPohoda/ImportProductInfo/{productId}", 
         new { controller = "TestPohoda", action = "ImportProductInfo" , productId = = UrlParameter.Optional }, 
         new[] { "Nop.Plugin.Test.Pohoda.Controllers" } 
       ); 
      } 
      public int Priority 
      { 
       get 
       { 
        return 1; 
       } 
      } 
     } 
    } 
Смежные вопросы