2013-03-03 64 views
2

环境调用Controller.Redirect或Controller.RedirectToAction:ASP.NET MVC 4时,Visual Studio 2012从外部库

由MVC 4模板创建的AccountController包括RedirectToLocal程序,防止URL欺骗攻击。我想把这个例程移到我自己的外部库(在它自己的库dll项目中)。经过一番调查,看起来最好的办法是扩展Controller类。我的(不成功)尝试这样做如下所示。

我的问题是,Controller.Redirect和Controller.RedirectToAction都是受保护的内部函数,并且“由于其保护级别而无法访问”。

什么是从外部库调用Redirect或RedirectToAction的常用方法?

public static class ControllerExtensionMethods 
{ 
    public static ActionResult RedirectToLocal(
            this Controller controller, 
            string redirectUrl) 
     { 
      if (controller.Url.IsLocalUrl(redirectUrl)) { 
       return controller.Redirect(redirectUrl); // error 
      } else { 
       return controller.RedirectToAction("Index", "Home"); // error 
      } 
     } 
} 

回答

2

我想解决这个就是制作并返回一个新的ActionResult,而不是试图调用受保护的重定向程序的一种方式。我很感激来自知道这个东西比我更好的人的确认。

public static class ControllerExtensionMethods 
{ 
    public static ActionResult RedirectToLocal(
            this Controller controller, 
            string redirectUrl) 
     { 
      if (controller.Url.IsLocalUrl(redirectUrl)) { 
       return new RedirectResult(redirectUrl); 
      } else { 
       return new RedirectToRouteResult(
        new RouteValueDictionary { 
         {"controller", controllerName}, 
         {"action", actionName} 
        }); 
      } 
     } 
}