How to get filter to redirect to another action?

后端 未结 5 934
伪装坚强ぢ
伪装坚强ぢ 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:38

    I know that I'm a little bit late to the party, but I used veggerby's solution and built a helper class that may be useful to some people, so I wanted to provide it here:

    public static class ActionFilterHelpers
    {
        public static void Redirect(this ActionExecutingContext filterContext, String controller, String action, object routeValues)
        {
            filterContext.Result = Redirect(controller, action, routeValues);
        }
    
        public static ActionResult Redirect(String controller, String action, object routeValues)
        {
            var routeValues = new RouteValueDictionary();
    
            routeValues["controller"] = controller;
            routeValues["action"] = action;
    
            foreach (var keyValue in new ObjectDictionary(routeValues))
                routeValues.Add(keyValue.Key, keyValue.Value);
    
            return new RedirectToRouteResult(routeValues);
        }
    }
    

    I provided both a static method that returns a redirect ActionResult and an extension method that extends filterContext. Hope someone finds this useful.

    ObjectDictionary is a class that uses reflection to create a dictionary from the properties of the object from which it is constructed. I didn't include that code because I believe there is a better way to do that somewhere in the framework. I haven't found it yet, but I don't want others to inherit my potential bugs.

提交回复
热议问题