我有一个用AuthorizeAttribute修饰的控制器 . 除了一个需要CustomAuthorizeAttribute提供的自定义身份验证的操作外,控制器还包含几个需要身份验证的操作 .
我的问题是,一旦我在控制器级别添加[授权],我可以使用[CustomAuthorize]仅在一个操作上覆盖它(或删除它)吗?或者我是否必须从控制器级别删除[授权]并将其单独添加到其他每个操作?
我纯粹是为了方便,因为我很懒,不想用AuthorizeAttribute来装饰每一个动作 .
[Authorize]
public class MyController : Controller {
//requires authentication
public ViewResult Admin() {
return View();
}
//... a lot more actions requiring authentication
//requires custom authentication
[CustomAuthorize] //never invoked as already failed at controller level
public ViewResult Home() {
return View();
}
}
3 回答
您可以更改运行属性的顺序(使用Order属性),但我相信在这种情况下,除非生成立即生效的结果,否则它们仍然会运行 . 关键是在最高级别(类)应用限制性最小的属性,并对方法进行更严格的限制 . 例如,如果您希望
Home
操作可公开,则需要从类中删除Authorize属性,并将其应用于其他每个方法 .如果动作具有相同的允许水平,但具有不同的结果,则更改顺序可能就足够了 . 例如,您通常会重定向到
Logon
操作,但对于Home
,您想要重定向到About
操作 . 在这种情况下,case给出类属性Order=2
和Home
action属性Order=1
.In MVC 5 您可以使用新属性OverrideAuthorization覆盖任何操作的授权 . 基本上,您将其添加到具有与控制器中定义的授权配置不同的授权配置的操作 .
你这样做:
更多信息,请致电http://www.c-sharpcorner.com/UploadFile/ff2f08/filter-overrides-in-Asp-Net-mvc-5/
In ASP.NET Core 2.1 没有OverrideAuthorization属性,你唯一能做的就是匿名行动,即使控制器没有 . 更多信息,请致电https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.1
一种选择是这样做:
经过太多时间,我想出了一个解决方案 . 您需要使用自定义AuthorizeAttribute来装饰控制器 .
哪个可以与Action上的
AllowAnonymous
配对