从自定义控制器查看覆盖默认视图

View from custom controller overriding default view

我使用的是 orchardcms 1.9(没有标记创建的 jet)。我正在编写一个自定义模块,它实现自己的控制器,该控制器调用一个服务来检查一些信息,并根据服务响应重定向或让用户留在页面上。

该模块在默认层上,换句话说它在每个页面上。因此,当用户尝试登录或注册时,此模块会正常检查信息。

这是我的路线:

 new RouteDescriptor {
                    Priority = -1,
                    Route = new Route(
                        "{*path}", // this is the name of the page url
                        new RouteValueDictionary {
                            {"area", "modulename"}, // this is the name of your module
                            {"controller", "controllername"},
                            {"action", "Redirect"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "modulename"} // this is the name of your module
                        },
                        new MvcRouteHandler())

这是我的控制器:

 public ActionResult Redirect()
        {
            String response = _authService.VerifyRegistration(_orchardServices.WorkContext.CurrentUser);

        if (response.Equals("2"))
        {
            Response.Redirect("~/Registration");
        }
        else if (response.Equals("3"))
        {
            Response.Redirect("~/Users/Account/LogOn");
        }


        return View();
    }

发生的事情是,当我去注册或登录控制器触发器时,检查信息,说不需要重定向,然后 returns 查看。但是因为视图是空的,所以我的页面是空白的,而不是默认的 login/registration 形式。

我该如何解决这个问题?我是否在路由中犯了一个错误,我以某种方式覆盖了默认视图(我尝试了不同的优先级但相同的响应)。

你的路线覆盖所有路线({*路径}。所以当你重定向时,你重定向到......我猜你的重定向器。因此你呈现的视图是你的控制器的视图,而不是你的页面之后。

无论存在什么逻辑缺陷 - 这都不是全局控制站点上授权类型方案的好方法。如果您打算拥有一个人们可能会访问的页面(例如 http://www.mysite/welcome) then your problem is that your route is too global. However, if, as your code suggests that you want to create a "all pages" check to see if you should go to login or register, then you should implement an authorization filter. An example of an authorization filter (for a slightly different purpose) can be found at 。您希望使用合适的代码填充 OnAuthorization 方法以重定向用户(或让他们通过