【问题标题】:Change URL Routing by overriding GenericPathRoute.cs in Plugin nopCommerce 3.3通过在插件 nopCommerce 3.3 中覆盖 GenericPathRoute.cs 来更改 URL 路由
【发布时间】:2014-05-22 12:27:30
【问题描述】:

我正在尝试创建一个将覆盖 TopicsDetails.cshtml 页面的插件。我添加了这样一条路线:

      routes.MapRoute("Nop.Plugin.Other.CustomTopic.ViewCustomTopic", "{SeName}",
                        new { controller = "CustomTopic", action = "TopicDetails", SeName = UrlParameter.Optional },
                        new[] { "Nop.Plugin.Other.CustomTopic.Controllers" });

这会将所有 {SeName} 都发送到我的 CustomTopicController 。甚至是产品 SeName。

如果我添加这个而不是旧的:

       routes.MapRoute("Nop.Plugin.Other.CustomTopic.ViewCustomTopic",
                        new { controller = "CustomTopic", action = "TopicDetails" },
                        new[] { "Nop.Plugin.Other.CustomTopic.Controllers" });

我收到一个错误,因为 TopicDetails(int itemId) Action 接收到一个未提供的整数,因为我们知道 GenericPathRoutes.cs 提供了该整数。

我怎样才能覆盖 GenericPathRoutes.cs 的规则来做到这一点,以便只有主题 SeName 会点击我的控制器,或者是否有其他方法可以做这种工作,甚至有可能做?

【问题讨论】:

  • 不清楚你想要什么,能否请你用一两句话说明你想要什么
  • 试图通过 nopCommerce 3.3 中的插件覆盖 TopicDetails.cshtml 页面

标签: c# nopcommerce


【解决方案1】:

最近我写了一篇文章,展示了如何覆盖本地化路由,并以 TopicDetails 视图为例。有文章是here。 总之,你的路由提供者应该是这样的;

public class RouteProvider : IRouteProvider
{
    private const string NAMESPACES = "Nop.Plugin.Misc.Custom.Controllers";
    private const string CONTROLLER = "MiscCustom";

    public void RegisterRoutes(RouteCollection routes)
    {     
        //Public Override
        routes.MapGenericPathRoute("Plugin.Misc.Custom.GenericUrl",
            "{generic_se_name}",
            new { controller = "Common", action = "GenericUrl" },
            new[] { NAMESPACES });

    }

    public int Priority
    {
        get { return Int32.Max; }
    }
}

【讨论】:

  • 这就像一个魅力。我可以问你一些与你的示例插件有关的事情吗?在文章中,您将优先级定义为 -1,但是当我在那里下载源代码时,您有 int.max?哪一个更好?我认为它应该大于 0 才能覆盖默认控制器。谢谢
【解决方案2】:

我不确定我是否理解你的问题 你可以通过添加来试试吗 id = UrlParameter.Optional 这里任何 id 参数都是可选的,它不会抛出该错误

【讨论】:

  • 实际上 nopcommerce 3.3 中的默认路由是这样的:routes.MapLocalizedRoute("Topic", "{SeName}", new { controller = "Topic", action = "TopicDetails" }, new[] { "Nop.Web.Controllers" }); 它应该给出错误。因为TopicDetails(int topicid)方法会接受一个整数。但是默认没有错误,因为一个整数(topicid)是由Nop.Web.Framework.Seo.GenericPathRoute.cs生成的。现在如何在我的插件中覆盖现有的 GenericPathRoute.cs??
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多