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

Orchard Admin route calls wrong MVC controller

我正在创建一个提供以下路线的 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(仪表板)而不是显示我的管理视图。我尝试了不同的优先级,不起作用。然后我尝试将控制器名称从 Admin 更改为 Administration,然后它突然起作用了。

有没有办法让路由与单词 "Admin" 一起工作?

更新:

AdminController.Index() 方法中的断点被击中,因此我的 AdminController 被路由系统正确使用,但在 return View() 之后显示了 Orchard 仪表板?!?添加像 return View("Test") 这样的视图参数应该导致显示 Views\Admin\Test.cshtml 也不起作用。我想我正面临一个 Orchard 调试会话。

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 处理此过滤的方式保持一致。因此,如果您不想应用管理主题,我建议您重命名您的控制器。