【问题标题】:Orchard controller not called using IRouteProvider and RouteAttribute未使用 IRouteProvider 和 RouteAttribute 调用果园控制器
【发布时间】:2015-03-27 08:48:51
【问题描述】:

我正在使用 IRouterProvider 根据this thread 中的建议从属性路由创建路由描述。调用路由器提供程序并获取路由。

我使用 Url.Action 辅助方法为这些特定操作生成链接,并按预期为自定义路由生成 url。但是,当导航这样的链接时,不会调用控制器。我得到了普通的 404。Orchard 甚至不在游戏中。

我的路线提供者看起来像:

public IEnumerable<RouteDescriptor> GetRoutes()
{
    var type = typeof(ShoppingCartController);

    foreach (var meth in type.GetMethods())
    {
        var attr = meth.GetCustomAttribute<System.Web.Mvc.RouteAttribute>();

        if (attr != null)
        {
            yield return new RouteDescriptor
            {
                Priority = 100,
                Name = string.Format("ShoppingCart{0}Route", meth.Name),
                SessionState = System.Web.SessionState.SessionStateBehavior.Required,
                Route = new Route(attr.Template,
                    new RouteValueDictionary 
                    {
                        { "area", "XXXX.Features" },
                        { "controller", "ShoppingCart" },
                        { "action", meth.Name }
                    },
                    new RouteValueDictionary(),
                    new RouteValueDictionary 
                    {
                        { "area", "XXXX.Features" }
                    },
                    new MvcRouteHandler())
            };
        }
    }
}

我的控制器方法签名是:

[Themed]
[Route("cart/checkout")]
public ActionResult CheckOut() {...}

我试图调试问题,但我什至不知道从哪里开始。我对果园很陌生。

提前致谢

【问题讨论】:

    标签: routes orchardcms orchardcms-1.8


    【解决方案1】:

    路由提供程序中的代码似乎没问题。您可以检查以下几点:

    • 在不使用RouteAttribute 的情况下对同一条路线进行硬编码,看看这条路线是否通过。如果是这样,那么属性本身会出于某种原因搞砸了,最好的选择是模仿属性类并使用该属性类来装饰动作。
    • 如果上述方法不起作用,则问题出在路由本身。在这种情况下:
      • 确保area 参数正确且等于您的控制器所在的模块(而非功能)名称(即模块项目名称)。
      • 对控制器和操作名称执行相同操作
      • 将路由优先级设置为int.MaxValue,以确保它不会被其他路由劫持
      • 尽量不要使用 Name 属性和/或确保它确实是独一无二的

    【讨论】:

    • 谢谢!问题在于属性本身。我将属性更改为自定义属性,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多