0

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

2 回答 2

1

这种情况的常用方法是使用 [Authorize] ( AuthorizeAttribute ) 您可以将其添加到特定的 Actions 或整个 Controller 中。它也支持特定的用户限制和角色。

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

完整的解释可以参考 NerdDinner 项目:http: //nerddinnerbook.s3.amazonaws.com/Part9.htm

于 2013-06-17T04:28:08.487 回答
1

Authorize 属性允许您指示授权仅限于预定义的角色或单个用户。

  • 这使您可以高度控制谁有权查看网站上的任何页面。
  • 如果未经授权的用户尝试访问标有 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();      
    }
 }
于 2013-06-17T04:30:46.493 回答