我正在使用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();
}
当我进入注册或登录控制器触发器时,检查信息,说不需要重定向然后返回视图。但由于视图为空,我的页面是空白而不是默认的登录/注册表单。
我该如何解决这个问题?我在路由中犯了一个错误,我以某种方式覆盖了默认视图(我尝试了不同的优先级,但响应相同)。
答案 0 :(得分:1)
你的路由会覆盖所有路由({* path}。所以当你重定向时,你会重定向到....你的重定向器我猜。因此你渲染的视图是你的控制器,而不是你追求的页面
无论逻辑缺陷是什么 - 这都不是全球控制您网站上的授权类型方案的好方法。如果你想要一个人们可能去的页面(例如http://www.mysite/welcome)那么你的问题就是你的路线过于全球化了。但是,如果您的代码建议您要创建“所有页面”检查以查看是否应该登录或注册,那么您应该实现授权过滤器。可以在https://stackoverflow.com/a/30377097/1638254找到授权过滤器的示例(用于略微不同的目的)。您希望使用合适的代码填写OnAuthorization
方法以重定向用户(或让他们通过