使用RedirectToRouteResult重定向不适用于其他区域

And*_*ers 19 asp.net-mvc-3

我有这个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" }));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它从起始页面起作用,它不在一个区域下,它不能在一个区域工作,因为它将重定向到/ Area/Home/Appoffline而不是/ Home/AppOffline

可以修复吗?

还有一种方法可以确定哪个控制器/动作重定向到使用泛型和强类型代码?

Dar*_*rov 56

尝试将area路由令牌分配给空字符串:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { 
    action = "AppOffLine", 
    controller = "Home", 
    area = "" 
}));
Run Code Online (Sandbox Code Playgroud)


jav*_*iry 13

你必须指定这样的区域:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要重定向到非区域区域(如/Home/Index),请将' area'设置为空字符串; 喜欢:

area=""
Run Code Online (Sandbox Code Playgroud)