WebApi自定义过滤器和构造函数中的注入接口不会被调用我的问题陈述和这个问题是一样的,就是在注入服务用于/filter。我试过BZ给出的解决方案,下面是我给出的解决方案的代码。//标记属性publicclassAuthorizeViewAttribute:Attribute{}//过滤publicclassAuthorizeViewFilter:IAuthorizationFilter{privatereadonlyIAccessRightsService_iAccessRightService;publicAuthorizeViewFilter(IAccessRightsServiceiAccessRightService){_iAccessRightService=iAccessRightService;}publicvoidOnAuthorization(AuthorizationContextfilterContext){RoleFeatureroleFeature=_iAccessRightService。获取角色特征();if(roleFeature.IsView){//redirecttocontroller}}}这是我使用的ninject绑定:this.BindFilter(System.Web.Mvc.FilterScope.Controller,0).WhenControllerHas();我不需要属性中的任何参数,所以我想我不需要使用此答案中提到的WithConstructorArgument,但我的过滤器从未被调用。我在AuthorizeViewAttribute中放了一个默认构造函数,调试后发现控件跳转到了AuthorizeViewAttribute中的默认构造函数,继续使用controller方法。我找不到任何解决方案。有什么建议么?短篇小说:您似乎正在尝试在webapi控制器上使用MVC过滤器和MVC绑定。这就是为什么它不起作用。长话:首先创建一个webapifilter提供程序(注意,你需要使用Ninject.Extensions.Factories包来使Nuncject解析Func)publicAuthorizeViewFilterProvider(FuncauthorizeViewFilterFactory){this._authorizeViewFilterFactory=authorizeViewFilterFactory;}publicIEnumerableGetFilters(HttpConfigurationconfiguration,HttpActionDescriptoractionDescriptor){if(!actionDescriptor.GetCustomAttributes().Any())returnEnumerable.Empty();returnnew[]{newFilterInfo(this._authorizeViewFilterFactory(),FilterScope.Action)};}}然后创建一个webapifilterpublicclassAuthorizeViewFilter:System.Web.Http.Filters.IAuthorizationFilter{privatereadonlyIAccessRightsService_iAccessRightService;publicAuthorizeViewFilter(IAccessRightsServiceiAccessRightService){_iAccessRightService=iAccessRightService;}公共任务ExecuteAuthorizationFilterAsync(HttpAactionContextactionContext,CancellationTokencancellationToken,Func>continuation){RoleFeatureroleFeature=_iAccessRightService.GetRoleFeatures();如果(roleFeature.IsView){返回延续();}elsereturnTask.FromResult(actionContext.Request.CreateErrorCodedent.Forsponse(HAccessdenied"));}}然后在绑定设置中绑定FilterProvider:以上是C#学习教程:WebApi自定义过滤器和注入接口构造函数不会被调用,有用,需要多了解C#学习教程,希望大家多多关注——this.Bind().To();本文收集自网络,不代表立场,如有涉及侵权,请点击维权联系管理员删除。明源:
