0

在显示有关身份验证的视图时(显示的视图取决于访问者是否是用户)。我面临很多选择。所以我需要你的帮助来告诉我如何处理这种情况:

  • 使用 2 个视图(一个用于用户,另一个用于访问者),或者只使用一个视图。
  • 使用 2 个动作(一个带有授权过滤器,另一个没有),或者只使用一个动作。

为什么你建议的选择更好?

4

1 回答 1

0

您不必不使用Authorize属性。它的主要功能是User在上下文中设置,然后默认情况下,它还会检查他们是否已登录。但是,最后一部分也可以通过使用AllowAnonymous属性来覆盖:

[Authorize]
[AllowAnonymous]
public ActionResult SomeView()
{
    ...
}

因此,现在您的视图将可以User使用,并且您可以使用基于身份验证状态的视图动态呈现视图的不同部分:

@if (User.IsAuthenticated)
{
    <p>Logged in</p>
}
else
{
    <p>Anonymous</p>
}

编辑(澄清)

Authorize属性实际上为您做了两件不同的事情。首先,它设置了识别用户的所有机制:读取 cookie 或其他任何东西,检查身份验证状态,提取用户信息,如果他们通过身份验证,等等。其次,它验证用户实际上已登录。使用AllowAnonymous跳过第二部分并允许任何人,无论是否登录,都可以访问该视图,但是这是关键,您仍然需要第一部分来了解您是否有经过身份验证的用户等信息。

因此,简单地说,同时使用AuthorizeAllowAnonymous属性本质上意味着“查看用户是否已登录,但不需要它访问此视图”。这允许匿名用户仍然可以访问该页面,但使您仍然可以向实际登录的用户提供独特或不同的内容。

于 2013-02-14T16:39:26.980 回答