我刚刚创建了我的第一个 C# Razor MVC3 项目。我以前涉足过它,但这是我第一次创建它。
无论如何,我有一个简单的问题。我正在使用使用MembershipProvider
AspNetSqlProfileProvider
默认项目构建的那个。
我的问题很简单,在加载之前我在哪里以及如何检查用户是否已登录,Home/Index.cshtml
以便我可以将他们引导到另一个页面?
如果他们已登录,我想将他们带到客户门户。
如果他们没有登录,我想把他们带到登录屏幕。
我刚刚创建了我的第一个 C# Razor MVC3 项目。我以前涉足过它,但这是我第一次创建它。
无论如何,我有一个简单的问题。我正在使用使用MembershipProvider
AspNetSqlProfileProvider
默认项目构建的那个。
我的问题很简单,在加载之前我在哪里以及如何检查用户是否已登录,Home/Index.cshtml
以便我可以将他们引导到另一个页面?
如果他们已登录,我想将他们带到客户门户。
如果他们没有登录,我想把他们带到登录屏幕。
这里有几个选项。您可以在您的主页/索引视图中执行此操作(如果这就是您所说的),然后只需使用以下内容:
if(Request.IsAuthenticated())
return RedirectToAction("login","login");
或者您可以在应用程序启动方法中执行此操作。不过,我可能只会做第一个。
一种更通用的设置方法将涉及两个步骤:
首先,将 [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>
如果未登录,用户将被重定向到的页面(而不是 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 中没有指定控制器或操作,那么它将默认为Home
andIndex