Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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
C# 授权和请求之间的差异。已验证_C#_Asp.net Mvc 4_Authentication_Authorization - Fatal编程技术网

C# 授权和请求之间的差异。已验证

C# 授权和请求之间的差异。已验证,c#,asp.net-mvc-4,authentication,authorization,C#,Asp.net Mvc 4,Authentication,Authorization,我是ASP.NET MVC的新手,经常遇到以下代码: [Authorize] public ActionResult Index() { if (Request.IsAuthenticated) // ... } if语句真的有必要吗?有人能解释一下两者的区别吗?Authorize可以检查角色成员身份。在这种情况下,if也是冗余的 这不是ASP.NETMVC的常见模式,您应该询问是谁编写了代码 这只会使测试变得更加困难。不需要进行if检查。[Authorize]属性可以做到这一点,事实

我是ASP.NET MVC的新手,经常遇到以下代码:

[Authorize]
public ActionResult Index()
{
  if (Request.IsAuthenticated)
  // ...
}

if语句真的有必要吗?有人能解释一下两者的区别吗?

Authorize
可以检查角色成员身份。在这种情况下,
if
也是冗余的

这不是ASP.NETMVC的常见模式,您应该询问是谁编写了代码


这只会使测试变得更加困难。

不需要进行
if
检查。
[Authorize]
属性可以做到这一点,事实上,它还通过检查角色成员身份来做更多的工作。查看
AuthorizeAttribute
的实现,看看它在幕后是如何工作的。

属性
[authorized]
意味着用户必须登录才能调用控制器端点

Request.IsAuthenticated
对于有条件地为经过身份验证的用户运行代码非常有用,例如

public ActionResult Index()
{

  somecodethatrunsforeverybody(); 
  if (Request.IsAuthenticated)
  {
    codethatrunsforauthenticatedusers();
  }

}

因此,如果一个
if(Request.IsAuthenticated)
,那么用
[Authorize]
装饰一个操作,然后包装整个内容是没有意义的。但是,根据我的示例,“登录”过程有两个方面:身份验证(用户提供凭证并进行验证)和授权(有效用户检查是否可以访问某些资源)。由于这些面是按该顺序执行的,“if(Request.IsAuthenticated)”至少是冗余的。所以没有区别?它们是不同的,用于不同的目的,但是用
[Authorize]
装饰一个动作,然后如果
if(Request.IsAuthenticated)
是冗余的,则包装整个内容。由于属性的原因,除非用户经过身份验证,否则操作/方法中的代码永远不会运行。