是否可以为MVC5控制器中的操作禁用身份验证过滤?[AuthenticateUser]publicclassHomeController:Controller{////GET:/Home/publicActionResultIndex(){returnView();}}[AllowAnonymous]publicActionResultList(){returnView();列表操作的身份验证?请指教....我的自定义过滤器编码如下..我也继承了FilterAttribute调用。请告知publicclassAuthenticateUserAttribute:FilterAttribute,IAuthenticationFilter{publicvoidOnAuthentication(AuthenticationContextcontext){if(this.IsAnonymousAction(context)){}if(user=="user"){//什么都不做}else{context.Result=新的HttpUnauthorizedResult();//标记未授权}}publicvoidOnAuthenticationChallenge(AuthenticationChallengeContextcontext){if(context.Result==null||context.ResultisHttpUnauthorizedResult){context.Result=newRedirectToRouteResult("Default.System",newWeb.Routing.RouteValueDictionary{{"controller","Home"},{"action","List"},{"returnUrl",context.HttpContext.Request.RawUrl}});}}}下面的代码生成一条错误消息:错误1??Thebestoverloadmethodmatchfor'MVC5Features.Filters.AuthenticateUserAttribute.IsAnonymousAction(System.Web.Mvc.AuthorizationContext)'hassomeinvalidargumentsc:userskirupananthan.gdocumentsvisualstudio2013项目MVC5FeaturesMVC5Features过滤器AuthenticateUserAttribute。CS1617MVC5Features错误2参数1:无法从“System.Web.Mvc.Filters.AuthenticationContext”转换为“System.Web.Mvc.AuthorizationContext”c:用户kirupananthan.g文档visualstudio2013项目MVC5FeaturesMVC5Features过滤器AuthenticateUserAttribute.cs1640MVC5Featuresif(this.IsAnonymousAction(context))因为它是您的自定义过滤器,您可以扩展它来处理AllowAnonymous(如果您不想使用AllowAnonymous,您可以创建自己的feNoAuthentication):publicclassAuthenticateUser:IAuthenticationFilter{publicvoidOnAuthentication(AuthenticationContextfilterContext){如果(this.IsAnonymousAction(filterContext)){返回;}//一些代码}privateboolIsAnonymousAction(AuthenticationContextfilterContext){returnfilterContext.ActionDescriptor.GetCustomAttributes(inherit:true)//.OfType任何属性。你想要.Any();尝试使用[AllowAnonymous]属性,如果您为该操作指定了特定的用户组,并且在您的自定义身份验证过滤器中允许该组进行所有操作在MVC5中,我参考了http://www.dotnetcurry.com/showarticle.aspx?ID=975类CustomOverrideAuthorizationAttribute继承自FilterAttribute类并实现了IOverrideFilter。此接口用于定义要应用于控制器的过滤器。属性FiltersToOverride返回IAuthorizationFilter类型。这意味着覆盖应用于父级(控制器或全局应用程序类)的授权过滤器我相信您应该从控制器中删除该属性并将其放在除List之外的每个操作方法上。因此,阅读@Bilal(2014-10-3012:24)发表的文章,似乎有一种优雅的方法可以通过类(或接口)覆盖过滤器。您必须为每个要覆盖的过滤器编写一个自定义属性,但如果您认为您可能不想覆盖很多过滤器,那么这可能不是一个大问题,对吧?所以在你的问题中你想覆盖AutherizationUser属性,所以你会实现这个类:}}}并把你的控制器重写为:以上是C#学习教程:IsitpossibletodisableauthenticationfilteringforaactioninanMVC5controller?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——[AuthenticateUser]publicclassHomeController:Controller{////GET:/Home/publicActionResultIndex(){返回视图();}[CustomOverrideAuthenticateUser]publicActionResultList(){returnView();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
