通过覆盖插件nopCommerce 3.3中的GenericPathRoute.cs来更改URL路由

时间:2014-05-22 12:27:31

标签: c# nopcommerce

我正在尝试创建一个将覆盖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主题可以访问我的Controller,或者是否有其他方式可以执行此类工作,或者甚至可以执行此操作?

2 个答案:

答案 0 :(得分: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 :(得分:0)

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