当前位置: 首页 > 编程语言 > C#

ActionFilterAttribute-适用于特定控制器类型的Action分享

时间:2023-04-10 14:22:32 C#

ActionFilterAttribute-适用于特定控制器类型的Action我正在使用ActionFilterAttribute来执行自定义认证逻辑。此属性仅在包含我的身份验证逻辑的派生Controller类中使用。这是我的控制器,派生自我的自定义控制器类和一个示例属性:这是我的ActionFilterAttribute的示例:publicclassCustomAuthorizeAttribute:ActionFilterAttribute{publicMyUserTypesUserType{get;放;}publicoverridevoidOnActionExecuting(ActionExecutingContextfilterContext){myUseruser=((CustomControllerBase)filterContext.Controller(!User).User;user.isAuthenticated){filterContext.RequestContext.HttpContext.Response.StatusCode=401;}}}效果很好。问题是:我是否可以仅对我的自定义控制器类型中的操作要求此属性?您可以将ActionFilter放在类本身上。此类中的所有操作都将实现ActionFilter。[CustomAuthorize]publicclassAuthorizedControllerBase:CustomControllerBase{}publicclassOpenAccessControllerBase:CustomControllerBase{}publicclassMyRealController:AuthorizedControllerBase{//GET:/myrealcontroller/indexpublicActionResultIndex(){返回视图();和约束,我采用了混合方法。基本上,如果请求是通过缓存路由发出的,或者如果出于任何原因未设置“用户”,则身份验证将以正确的方式失败。以上是C#学习教程:ActionFilterAttribute-适用于特定控制器类型的操作分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassCustomAuthorizeAttribute:AuthorizeAttribute{privateMyUserUser{get;放;}publicoverridevoidOnAuthorization(AuthorizationContextfilterContext){//延迟加载控制器中的用户。用户=((MyControllerBase)filterContext.Controller).User;base.OnAuthorization(filterContext);}protectedoverrideboolAuthorizeCore(HttpContextBasehttpContext){boolisAuthorized=false;字符串retLink=httpContext.Request.Url.AbsolutePath;如果(用户!=null){isAuthorized=User.IsValidated;}if(!isAuthorized){//如果当前请求是通过AJAX调用传入的,//简单地返回一个基本的401状态代码,否则,//重定向到登录页面。如果(httpContext.Request.IsAjaxRequest()){httpContext.Response.StatusCode=401;}else{httpContext.Response.Redirect("/login?retlink="+retLink);}}返回授权;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: