【问题标题】:restrict the user from jumping controller and action methods限制用户跳转控制器和动作方法
【发布时间】:2011-03-19 15:18:17
【问题描述】:

大家:

我的 ASP.NET MVC 1.0 应用程序更像是一个工作流。

意思是:父控制器的action方法(认证)--> Child 1 Action方法--> Child 2 Action方法--> Child n Action

现在,一旦访问者通过父控制器的 action 方法完成了身份验证,他就可以操纵 URL 并直接跳转到子 2 的 action 方法。 我们想避免这种情况,在这种情况下,我们希望他们进入错误页面。

我们如何实现限制用户从 1 跳转到另一个动作方法?

【问题讨论】:

    标签: asp.net-mvc url asp.net-mvc-routing


    【解决方案1】:

    您可以使用 TempData 提供一些键,如果该值不存在,您可以将用户重定向回上一步。

    或者你可以用[HttpPost]装饰后续的action方法,将每个Formaction设置为控制器中的下一个action方法,并且这些action对于GET请求是不可用的。

    【讨论】:

    • 非常感谢!我正在考虑有更高级的解决方案。我们有很多这样的工作流程。因此,所涉及的工作将是巨大的。我们可以装饰 Action 方法,以便我们可以达到同样的效果吗?
    • 您可以使用HandleErrorAttribute,即:[HandleError(View = "YourErrorPageView", ExceptionType = typeof(TriedToGoToStepNotAuthorizedForException))]。您还可以自定义FilterAttribute(或扩展HandleErrorAttribute),允许您指定执行该方法所需的任何标准,例如HttpMethods、QueryString 键/值等。我相信使用属性这种方式可以让 ActionMethod 专注于自己的执行,而 FilterAttribute 可以决定是否应该执行该方法。
    • 有没有办法让我们有以前访问过的(控制器/操作名称)类似referrer的东西?这样我就可以检查引用者是否是父操作方法!请指教。
    • 有没有办法让我们有以前访问过的(控制器/操作名称)类似referrer的东西?这样我就可以检查引用者是否是父操作方法!请告知是否可以在没有任何问题的情况下使用以下 ServerVariable。 HttpContext.Request.ServerVariables["HTTP_REFERER"]
    • 您可以使用它或 Request.UrlReferrer 的便捷方法来包装相同的东西。
    【解决方案2】:

    将您的子操作方法设为私有,以便它们只能通过父操作访问。

    [Authorize]
    public ActionResult Parent(string color)
    {
        if(color=="Red")
            return Child1();
        return Child2();
    }
    
    private ActionResult Child1()
    {
        return View("this");
    }
    
    private ActionResult Child2()
    {
        return View("that");
    }
    

    ~/Controller/Parent 路由到 Controller.Parent()。

    ~/Controller/Child1 路由到 404:未找到。 ~/Controller/Child2 路由到 404:未找到。

    【讨论】:

    • 亲爱的 Byron.. 您的建议可能不起作用:Action 方法是可通过 Web 访问的公共方法。如果将其设为私有,则无法通过 RedirectToAction 从任何操作方法导航
    • 没错。只要您的父方法与您的子方法在同一个类中,您就可以调用 return ChildMethod()。
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多