渲染视图的正确方法是什么?

时间:2013-06-17 04:13:56

标签: asp.net-mvc views

我正在尝试创建一个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" });
    }

2 个答案:

答案 0 :(得分:1)

此案例的常用方法是使用[授权](AuthorizeAttribute) 您可以将其添加到特定操作或整个Controller。它既可以支持特定的用户限制,也可以支持角色。

您可以从Visual Studio的默认MVC解决方案开始,它将基于SimpleMembership提供程序创建所有基本功能。

您可以参考NerdDinner项目获取完整说明:http://nerddinnerbook.s3.amazonaws.com/Part9.htm

答案 1 :(得分:1)

Authorize attribute可让您指明授权仅限于预定义角色或个别用户。

  • 这使您可以高度控制谁有权查看网站上的任何页面。
  • 如果未经授权的用户尝试访问使用Authorize属性标记的方法,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();      
    }
 }
相关问题