Редирект с RedirectToRouteResult не работает из другой области - PullRequest
19 голосов
/ 01 августа 2011

У меня есть этот ActionFilter

public class AppOfflineFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionDescriptor.ActionName != "AppOffLine" &&
            filterContext.HttpContext.Request.UserHostName != "127.0.0.1")
        {
            filterContext.Result = new RedirectToRouteResult(
                 new RouteValueDictionary(
                     new  { action = "AppOffLine", Controller = "Home" }));
        }
    }
}

Он работает со стартовой страницы, которая не находится в области, он не работает из области, потому что он будет перенаправлять на / Area / Home / Appoffline вместо / Home / AppOffline

Можно ли это исправить?

Также существует ли способ указать, какой контроллер / действие перенаправить на использование универсального кода и строго типизированного кода?

Ответы [ 2 ]

54 голосов
/ 01 августа 2011

Попробуйте назначить маркер маршрута area пустой строке:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { 
    action = "AppOffLine", 
    controller = "Home", 
    area = "" 
}));
13 голосов
/ 01 августа 2011

вы должны указать область следующим образом:

public class AppOfflineFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionDescriptor.ActionName != "AppOffLine" &&
            filterContext.HttpContext.Request.UserHostName != "127.0.0.1")
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new { action = "AppOffLine", Controller = "Home",
                          area = "YourAreaName" })); //<<<<THIS
        }
    }
}

и, если вы хотите перенаправить в необластную зону (например, /Home/Index), установите 'area' на пустую строку;как:

area=""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...