Orchard Admin路由调用错误的MVC控制器

时间:2015-02-17 09:49:43

标签: model-view-controller module routes admin orchardcms

我正在创建一个Orchard模块,它提供以下路径

public System.Collections.Generic.IEnumerable<Orchard.Mvc.Routes.RouteDescriptor> GetRoutes()
{
  Orchard.Mvc.Routes.RouteDescriptor[] lRoutes =
    new Orchard.Mvc.Routes.RouteDescriptor[] 
    {
      new Orchard.Mvc.Routes.RouteDescriptor()
      {
        Name = "Admin URL",
        Priority = 0, 
        Route = new System.Web.Routing.Route(
          "RetailSector/Mailing/Admin",
          new System.Web.Routing.RouteValueDictionary() { {"area", "MyModuleName"}, {"controller", "Admin"}, {"action", "Index"} }, 
          new System.Web.Routing.RouteValueDictionary(),
          new System.Web.Routing.RouteValueDictionary() { {"area", "MyModuleName"} },
          new System.Web.Mvc.MvcRouteHandler()
        )
      }
    };

  return lRoutes;
}

当我输入

http://localhost:30321/OrchardLocal/RetailSector/TuesdayMail/Admin
进入浏览器,Orchard路由进入Orchard Admin(仪表板),而不是显示我的管理员视图。我尝试了不同的优先级,不起作用。然后我尝试从管理员更改控制器名称,让我们说管理,然后突然它可以工作。

有没有办法让路线使用&#34; Admin&#34;?

这个词

更新

AdminController.Index()方法中的断点被点击,因此我的AdminController被路由系统正确使用,但在return View()显示Orchard仪表板后?!?添加应该导致显示return View("Test")的{​​{1}}视图参数也不起作用。我想我正面临Orchard调试会议。

1 个答案:

答案 0 :(得分:2)

Orchard会自动解析任何名为AdminController的控制器,该控制器将以Admin主题(仪表板)为主题。它的作用与将[Admin]属性应用于控制器的行为相同。

查看第40-55行的Orchard.Framework.UI.Admin.AdminFilter.cs代码:

private static bool IsAdmin(AuthorizationContext filterContext) {
    if (IsNameAdmin(filterContext) || IsNameAdminProxy(filterContext)) {
        return true;
    }

    var adminAttributes = GetAdminAttributes(filterContext.ActionDescriptor);
    if (adminAttributes != null && adminAttributes.Any()) {
        return true;
    }
    return false;
}

private static bool IsNameAdmin(AuthorizationContext filterContext) {
    return string.Equals(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, "Admin",
                            StringComparison.OrdinalIgnoreCase);
}

它通过检查控制器的名称是否为Admin来检查当前上下文是否为admin。

您可能希望与Orchard如何处理此过滤保持一致。因此,如果您不想应用管理主题,我建议您重命名控制器。