我刚创建了我的第一个C#Razor MVC3项目。我之前已经涉足过,但这是我第一次创建它。
无论如何,我有一个简单的问题。我使用的是使用默认项目构建的MembershipProvider
AspNetSqlProfileProvider
。
我的问题很简单,在加载Home/Index.cshtml
之前,我在哪里以及如何检查用户是否已登录,以便我可以将其定向到另一个页面?
如果他们已登录,我想将他们带到客户门户网站。
如果他们没有登录,我想将他们带到登录屏幕。
答案 0 :(得分:2)
这里有几个选择。你可以在你的家庭/索引视图中做到这一点(如果你正在调用它),然后使用类似的东西:
if(Request.IsAuthenticated())
return RedirectToAction("login","login");
或者您可以在应用程序启动方法中执行此操作。不过,我可能只是做第一个。
答案 1 :(得分:2)
设置此方法的更通用方法包括两个步骤:
首先,为您正在保护的操作添加[授权]属性:
[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>
答案 2 :(得分: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
这意味着如果在网址中未指定任何控制器或操作,则默认为Home
和Index