我目前有一些控制器,我已经使用[Authorize]
装饰器进行了限制。我现在需要在几个不同的控制器中执行此操作,是否有可以放入的中心位置?一旦进入该位置,我可以告诉它应用哪个控制器,而不是将它放到每个控制器文件中?
答案 0 :(得分:2)
这样的事情怎么样:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
string controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName;
bool shouldAuthorize = //.. Check if controller needs authorization
if(!shouldAuthorize)
SkipAuthorization(actionContext);
else if(!IsAuthorized(actionContext))
HandleUnauthorizedRequest(actionContext);
}
}
然后,您将全局应用此过滤器:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomAuthorizeAttribute());
}
请注意,控制器验证在内部自定义属性中完成。
答案 1 :(得分:0)
您可以创建其他控制器继承的基本控制器。在此课程中,请应用您的主要授权属性。
Namespace Controllers
<SecureAuthorizeAttribute>
Public Class SecureController
Inherits Controller
End Class
End Namespace
然后在你的其他控制器中:
Public Class ViewDetailsController
Inherits SecureController
End Class
这会将<SecureAuthorizeAttribute>
应用于从SecureController
继承的类中的每个操作。