我正在尝试创建一个MVC 4 ASP.net站点。由于我是编程新手,我想知道根据用户是否登录来呈现视图的正确方法是什么。
我的代码:我试图限制用户访问“索引”,“关于”和“联系”页面。如果用户已登录,它将仅转到那些页面(视图)。我的问题是,“这是正确的做法还是错了?是否有更安全,有效和可接受的方式来做这件事?”
如果有,请告诉我。谢谢
public class HomeController : Controller
{
public ActionResult Index()
{
if (User.Identity.IsAuthenticated)
{
return View();
}
return RedirectToRoute(new { controller = "Account", action = "Login" });
}
public ActionResult About()
{
if (User.Identity.IsAuthenticated)
{
ViewBag.Message = "Your app description page.";
return View();
}
return RedirectToRoute(new { controller = "Account", action = "Login" });
}
public ActionResult Contact()
{
if (User.Identity.IsAuthenticated)
{
ViewBag.Message = "Your contact page.";
return View();
}
return RedirectToRoute(new { controller = "Account", action = "Login" });
}
答案 0 :(得分:1)
此案例的常用方法是使用[授权](AuthorizeAttribute) 您可以将其添加到特定操作或整个Controller。它既可以支持特定的用户限制,也可以支持角色。
您可以从Visual Studio的默认MVC解决方案开始,它将基于SimpleMembership提供程序创建所有基本功能。
您可以参考NerdDinner项目获取完整说明:http://nerddinnerbook.s3.amazonaws.com/Part9.htm。
答案 1 :(得分:1)
Authorize attribute可让您指明授权仅限于预定义角色或个别用户。
MVC
框架将返回401 HTTP
状态代码。 ASP.NET
表单身份验证,则401
状态代码会导致浏览器将用户重定向到登录页面。如果所有方法都需要登录,您可以在控制器上使用[Authorize]
:
[Authorize]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
如果需要,您还可以将属性放在某些方法上,而不是放在控制器本身上。例如,如果您希望用户只登录Index()
方法,那么您可以按以下方式执行:
public class HomeController : Controller
{
[Authorize]
public ActionResult Index()
{
return View();
}
}