gpt4 book ai didi

asp.net-mvc - 在 Controller 级别指定操作过滤器与在操作方法级别指定操作过滤器,后者将首先运行

转载 作者:行者123 更新时间:2023-12-01 02:16:30 24 4
gpt4 key购买 nike

当我创建一个 asp.net MVC 5 web 项目时,我检查了 Account Controller ,我找到了以下代码:-

 [Authorize]
public class AccountController : Controller
{
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}

他们在 Controller 级别指定 [Authorize],在操作方法级别指定 [AllowAnonymous]。我认为 asp.net mvc 将首先检查 Controller 级别的所有 Action 过滤器,如果它们成功,它将使用 Action 方法调用进行处理。但似乎情况并非如此,因为匿名用户可以调用登录操作方法,尽管 [Authorize] 是在 Controller 级别指定的?那么这里的场景是什么?

谢谢

最佳答案

您可以先查看 Authorize 属性源代码以了解其工作原理:
http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/AuthorizeAttribute.cs

仔细查看 OnAuthorization 方法:您将看到它在操作或 Controller 上查找 AllowAnonymous 属性,如果找到,则跳过授权。

bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);

if (skipAuthorization)
{
return;
}

关于asp.net-mvc - 在 Controller 级别指定操作过滤器与在操作方法级别指定操作过滤器,后者将首先运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24309961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com