从自定义控制器查看覆盖默认视图
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
方法以重定向用户(或让他们通过
我使用的是 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
方法以重定向用户(或让他们通过