How to get filter to redirect to another action?

后端 未结 5 937
伪装坚强ぢ
伪装坚强ぢ 2020-12-13 07:52

RedirectToAction is protected, and we can use it only inside actions. But if I want to redirect in a filter?

public class IsGuestAttribute: Acti         


        
5条回答
  •  醉话见心
    2020-12-13 08:39

    Usage: filterContext.RedirectToAction("Login", "Account");

    Here's a helper class I wrote with some extension methods written to provide RedirectToAction functionality in more places. This is far too late for the OP but hopefully it helps someone!

    public static class RedirectHelper
    {
        // RedirectToAction Extension Methods
        public static void RedirectToAction(this HttpResponseBase response, String action, String controller, object routeValues = null, bool endResponse = false)
        {
            response.RedirectToRoute(CreateRoute(action, controller, routeValues));
            if (endResponse) response.End();
        }
        public static void RedirectToAction(this HttpResponse response, String action, String controller, object routeValues = null, bool endResponse = false)
        {
            response.RedirectToRoute(CreateRoute(action, controller, routeValues));
            if (endResponse) response.End();
        }
        public static void RedirectToAction(this ActionExecutingContext filterContext, String action, String controller, object routeValues = null, bool endResponse = false)
        {
            if (endResponse) filterContext.HttpContext.Response.RedirectToAction(action, controller, routeValues, true);
            else filterContext.Result = new RedirectToRouteResult(CreateRoute(action, controller, routeValues));
        }
        public static void RedirectToAction(this ExceptionContext filterContext, String action, String controller, object routeValues = null, bool endResponse = false)
        {
            if (endResponse) filterContext.HttpContext.Response.RedirectToAction(action, controller, routeValues, true);
            else {
                filterContext.ExceptionHandled = true;
                filterContext.Result = new RedirectToRouteResult(CreateRoute(action, controller, routeValues));
            }
        }
        // Route Value Derivation
        public static RouteValueDictionary CreateRoute(String action, String controller, object routeValues = null)
        {
            RouteValueDictionary result = routeValues != null ? 
                HtmlHelper.AnonymousObjectToHtmlAttributes(routeValues) : 
                new RouteValueDictionary();
            result["controller"] = controller;
            result["action"] = action;
            return result;
        }
    }
    

    There are more ControllerContexts that are not included but it should be fairly easy to add your own based on your needs.

提交回复
热议问题