我正在创建一个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调试会议。
答案 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如何处理此过滤保持一致。因此,如果您不想应用管理主题,我建议您重命名控制器。