C# 授权和请求之间的差异。已验证
我是ASP.NET MVC的新手,经常遇到以下代码: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]属性可以做到这一点,事实
[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)
是冗余的,则包装整个内容。由于属性的原因,除非用户经过身份验证,否则操作/方法中的代码永远不会运行。