代码之家  ›  专栏  ›  技术社区  ›  D'Arcy Rittich

如何找到当前控制器/操作/视图的名称?

  •  0
  • D'Arcy Rittich  · 技术社区  · 16 年前

    我在母版页后面放了一些代码。此母版页是我的主布局,代码的目的是检查用户是否登录,并根据他们是否登录采取适当的操作。我很想听听关于如何处理这个问题的其他方法,但我现在是这样做的,因为它是来自另一个MVC框架的直接端口,我希望在端口期间尽可能少地修改代码或流。

    我真正的问题是,如何确定正在执行的当前控制器、操作和视图的名称?代码隐藏中的一些逻辑依赖于知道当前页面名称。具体来说,它说(伪代码):

    if (!isLoggedIn && !isLoginPage)
        Redirect(loginPage);
    

    所以,我需要知道我是否已经在登录页面上,以避免无限的重定向循环。我目前正在通过检查URL来实现这一点,以查看它是否包含字符串/login/,但这是一种黑客行为,我宁愿使用更健壮和智能的方法。

    3 回复  |  直到 16 年前
        1
  •  2
  •   MrJavaGuy    16 年前

    查看控制器和控制器操作的授权属性。它可以避免您在母版页后面的代码中做任何事情。

        2
  •  4
  •   user1151    16 年前

    检查用户是否登录(假设您使用的是formsauth)的最佳方法是user.identity.isauthenticated,它可以从视图或控制器访问。

    在我看来,你需要在这里插入表单认证——它为你处理一切,包括重定向。在web.config中,确保添加了:

    <authentication mode="Forms">
        <forms loginUrl="~/Account/Login"/>
    </authentication>
    

    这会告诉你的应用你正在使用表单认证。接下来,对要锁定的方法使用actionfilter:

    /// <summary>
    /// Default view
    /// </summary>
    /// <returns></returns>
    [Authorize(Roles="Administrator")]
    public ActionResult Index()
    {
        return View();
    }
    

    这将与表单授权一起使用,以确保用户已被识别。它还将自动附加当前的URL作为重定向,并忽略登录视图——所有这些都是自动的,为您完成的。

        3
  •  1
  •   D'Arcy Rittich    16 年前

    注意:有许多方法可以将数据传递到概述的母版页 here .