redirect到指定的控制器和动作在asp.net mvc行动filter
我写了一个操作filter,它检测到一个新的会话,并尝试将用户redirect到一个页面,通知他们已经发生了这种情况。 唯一的问题是我无法弄清楚如何使它redirect到操作filter中的控制器/操作组合。 我只能找出如何redirect到指定的url。 有没有一种直接的方式来redirect到控制器/操作组合在MVC2中的操作filter?
您可以将filter上下文的结果设置为RedirectToRouteResult,而不是直接在ActionFilter中获取对HttpContent的引用并redirect。 这对testing来说更清洁一些。
喜欢这个:
public override void OnActionExecuting(ActionExecutingContext filterContext) { if(something) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary {{ "Controller", "YourController" }, { "Action", "YourAction" } }); } base.OnActionExecuting(filterContext); }
编辑:原来的问题是关于如何检测会议注销,然后自动redirect到指定的控制器和操作。 这个问题certificate更有用,因为它是目前的forms。
我结束了使用项目的组合来实现这个目标。
首先是在这里find的会话过期filter。 然后,我想要指定控制器/操作组合来获得redirect的URL,我在这里find了很多的例子。 最后我想出了这个:
public class SessionExpireFilterAttribute : ActionFilterAttribute { public String RedirectController { get; set; } public String RedirectAction { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContext ctx = HttpContext.Current; if (ctx.Session != null) { if (ctx.Session.IsNewSession) { string sessionCookie = ctx.Request.Headers["Cookie"]; if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) { UrlHelper helper = new UrlHelper(filterContext.RequestContext); String url = helper.Action(this.RedirectAction, this.RedirectController); ctx.Response.Redirect(url); } } } base.OnActionExecuting(filterContext); } }
使用这个重载来调用RedirectToAction :
protected internal RedirectToRouteResult RedirectToAction( string actionName, RouteValueDictionary routeValues )
在“行动filter”中,故事有点不同。 举一个很好的例子,看这里:
http://www.dotnetspider.com/resources/29440-ASP-NET-MVC-Action-filters.aspx