如何从基本控制器的OnActionExecutingredirect?
我已经尝试了两种方法:Response.Redirect()什么也不做,以及在基本控制器内调用一个返回一个ActionResult的新方法,并让它返回RedirectToAction()…这些都没有工作。
我怎样才能从OnActionExecuting方法做redirect?
public override void OnActionExecuting(ActionExecutingContext filterContext) { ... if (needToRedirect) { ... filterContext.Result = new RedirectResult(url); return; } ... }
也可以这样做:
filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary {{"controller", "Home"}, {"action", "Index"}});
创build一个单独的类,
public class RedirectingAction : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context); if (CheckUrCondition) { context.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" })); } } }
然后,当你创build一个控制器时,把这个注解称为
[RedirectingAction] public class TestController : Controller { public ActionResult Index() { return View(); } }
如果redirect的控制器从同一个baseController
inheritance我们重写OnActionExecuting
方法导致recursion循环。 假设我们将其redirect到账户控制器的login动作,那么login动作将会调用OnActionExecuting
方法,并且一次又一次被redirect到相同的login动作。所以我们应该在OnActionExecuting
方法中应用一个检查来检查天气请求是否来自相同的如果是这样,那么不要再redirect它的login行为。 这里是代码:
保护覆盖。
void OnActionExecuting(ActionExecutingContext filterContext) { try { some condition ... } catch { if (filterContext.Controller.GetType() != typeof(AccountController)) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } }); } } }
- 在Linux上部署ASP.NET MVC:最佳实践,工具和惊喜
- 如何使用ASP.NET MVC ViewModels knockout.js?
- 在控制器.NET MVC中创build一个URL
- ASP.NET视图中的区域?
- ASP.NET Asp.Net MVC中的HTTPerror handling程序(RC 5)
- 将Linqexpression式“obj => obj.Prop”转换为“parent => parent.obj.Prop”
- 什么是MVC中的ViewModel?
- 是否可以在自定义的AuthorizeAttribute类中使用RedirectToAction()?
- Html.Textbox VS Html.TextboxFor