Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 显示有关身份验证的视图?_Asp.net Mvc_Authentication - Fatal编程技术网

Asp.net mvc 显示有关身份验证的视图?

Asp.net mvc 显示有关身份验证的视图?,asp.net-mvc,authentication,Asp.net Mvc,Authentication,在显示有关身份验证的视图时(显示的视图取决于访问者是否为用户)。我面临许多选择。因此,我需要你的帮助来告诉我如何应对这种情况: 使用两个视图(一个供用户使用,另一个供访问者使用),或仅使用一个视图 使用两个操作(一个带授权筛选器,另一个不带),或仅使用一个操作 为什么您建议的选择更好?您不必不使用Authorize属性。它的主要功能是在上下文中设置用户,然后默认情况下,它还检查用户是否登录。但是,也可以使用AllowAnonymous属性覆盖最后一部分: [Authorize] [Allow

在显示有关身份验证的视图时(显示的视图取决于访问者是否为用户)。我面临许多选择。因此,我需要你的帮助来告诉我如何应对这种情况:

  • 使用两个视图(一个供用户使用,另一个供访问者使用),或仅使用一个视图
  • 使用两个操作(一个带授权筛选器,另一个不带),或仅使用一个操作

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

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

[Authorize]
[AllowAnonymous]
public ActionResult SomeView()
{
    ...
}
因此,现在您的视图将有一个
用户
可供使用,并且您可以根据身份验证状态动态显示视图的不同部分:

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

} 其他的 { 匿名的

}
编辑(澄清)

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


因此,简单地说,同时使用
Authorize
AllowAnonymous
属性意味着“查看用户是否登录,但不要求其访问此视图”。这允许匿名用户仍然访问该页面,但允许您仍然向实际登录的用户提供唯一或不同的内容。

谢谢,但是为什么要使用Authorize然后用Allowanonymous覆盖它,我的意思是,如果您不使用
Authorize
,为什么我们不忽略这两个属性,那么用户将不会在登录用户(如果存在)的上下文中填充。我没有理解,你能再解释一次吗?从哪里学来的,为什么我读的电子书没有告诉所有关于[Authorize]的内容,但这里有一些错误,我使用的是mvc 4,即使我没有添加任何属性,它也适用于我,关于用户的另一件事是,它是这样工作的:User.Identity.IsAuthenticated