1

我刚刚创建了我的第一个 C# Razor MVC3 项目。我以前涉足过它,但这是我第一次创建它。

无论如何,我有一个简单的问题。我正在使用使用MembershipProvider AspNetSqlProfileProvider默认项目构建的那个。

我的问题很简单,在加载之前我在哪里以及如何检查用户是否已登录,Home/Index.cshtml以便我可以将他们引导到另一个页面?

如果他们已登录,我想将他们带到客户门户。

如果他们没有登录,我想把他们带到登录屏幕。

4

3 回答 3

2

这里有几个选项。您可以在您的主页/索引视图中执行此操作(如果这就是您所说的),然后只需使用以下内容:

 if(Request.IsAuthenticated())
    return RedirectToAction("login","login");

或者您可以在应用程序启动方法中执行此操作。不过,我可能只会做第一个。

于 2012-09-04T21:47:34.037 回答
2

一种更通用的设置方法将涉及两个步骤:

首先,将 [Authorize] 属性添加到您要保护的操作中:

[Authorize]
public ActionResult Index() {

}

这将确保用户已通过身份验证(使用 FormsAuthentication)。

其次,在您的 Web.config 文件中,设置您希望用户在需要登录时重定向到的 URL。

<authentication mode="Forms">
    <forms name="cookieName" loginUrl="~/Account/LogOn" timeout="30" domain=".example.com" slidingExpiration="true" />
</authentication>
于 2012-09-04T21:50:57.013 回答
0

如果未登录,用户将被重定向到的页面(而不是 url)在Web.config下面定义:

  <authentication mode="Forms">
      <forms loginUrl="~/Home/GetIn" .... />
    </authentication>

但是,如果登录,则会启动 ASP.NET MVC 路由,该路由在Global.asax.cs默认情况下具有以下路由:

  routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new {
            controller = "Home",
             action = "Index",
             id = UrlParameter.Optional
        } // Parameter defaults

这意味着如果在 URL 中没有指定控制器或操作,那么它将默认为HomeandIndex

于 2012-09-04T21:50:28.777 回答