我有一个控制器,我想要求默认除了一对夫妇之外的所有操作的授权。因此,在下面的示例中,除Index之外,所有操作都需要认证。我不想装饰每个动作与授权,我只是想在某些情况下覆盖默认授权,可能是一个自定义过滤器,如NotAuthorize。
[Authorize] public class HomeController : BaseController { [NotAuthorize] public ActionResult Index() { // This one wont return View(); } public ActionResult About() { // This action will require authorization return View(); } }
解决方法
好的,这是我做的。如果有更好的方式让我知道。
public class NotAuthorizeAttribute : FilterAttribute { // Does nothing,just used for decoration } public class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { // Check if this action has NotAuthorizeAttribute object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(true); if (attributes.Any(a => a is NotAuthorizeAttribute)) return; // Must login if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new HttpUnauthorizedResult(); } } }