2

环境: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
            }
        }
}
4

1 回答 1

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}
                   });
            }
        }
}
于 2013-03-03T20:43:29.880 回答