0

我用谷歌搜索了很多,但仍然没有运气。

这是我的RouteConfig.cs

routes.MapRoute("BackRoute", "back/{controller}/{action}"
     ,new { controller = "Home", action = "Index" });

routes.MapRoute("Default", "{controller}/{action}"
     ,new { controller = "Home", action = "Index" });

如您所见,有相同的参数,但我有业务逻辑可以在后面的代码之间BackRoute进行选择。Default

我可以从 更改路线ActionFilterAttribute吗?

public override void OnActionExecuting(ActionExecutingContext filterContext){
   bool logic = true;
   RouteValueDictionary rvd = filterContext.RouteData.Values;
   if(logic){
       filterContext = new RedirectToRouteResult("BackRoute", 
                       new RouteValueDictionary(new { 
                             controller = rvd["controller"].ToString() 
                           , action = rvd["action"].ToString() }));
   }
}

你们能建议我实现这一目标的好方法吗?

先感谢您,

和平

4

1 回答 1

0

在您的属性中,您可以使用:

filterContext.Result = new RedirectToRouteResult("BackRoute",
     new RouteValueDictionary(
               new { action = "Index", controller = "Home" });

更新:无限循环意味着您正在重定向到首先调用的操作。在设置 RedirectToRouteResult 之前尝试再添加一项检查:

if(logic && filterContext.RouteData.Route != RouteTable.Routes["BackRoute"])
{
       filterContext.Result = new RedirectToRouteResult("BackRoute", 
                                new RouteValueDictionary(new { 
                                     controller = rvd["controller"].ToString() 
                                     , action = rvd["action"].ToString() }));
}
于 2014-03-21T03:15:54.483 回答