asp.net-mvc-3 – 使用构造方法参数过滤的Ninject绑定属性
我看到尽可能多的答案,但他们似乎没有一个细节.
麻烦的是将操作过滤器(由控制器注入的服务)绑定到相应的属性时,我一直无法弄清楚如何将参数/属性值从属性传递到其绑定的过滤器.下面是代码,下面是我想要的假码: 过滤器属性 public class AuthorizationFilter : IAuthorizationFilter { private readonly IAuthorizationService _authorizationService; private readonly UserRoles _requiredRoles; // Enum public AuthorizationFilter(IAuthorizationService authorizationService,UserRoles requiredRoles) { _authorizationService = authorizationService; _requiredRoles = requiredRoles; } public void OnAuthorization(AuthorizationContext filterContext) { if (filterContext.HttpContext.Session == null) HandleUnauthorizedRequest(filterContext); else { var authorized = _authorizationService.IsUserInRole((UserSessionInfoViewModel) filterContext.HttpContext.Session["user"],_requiredRoles); if (!authorized) HandleUnauthorizedRequest(filterContext); // else TODO: deal with cache... } } } public class RequireRolesAttribute : FilterAttribute { public readonly UserRoles RequiredRoles; public RequireRolesAttribute(UserRoles requiredRoles) { RequiredRoles = requiredRoles; } } 过滤器/属性绑定 kernel.BindFilter<AuthorizationFilter>(FilterScope.Controller,0) .WhenControllerHas<RequireRolesAttribute>(); kernel.BindFilter<AuthorizationFilter>(FilterScope.Action,0) .WhenActionMethodHas<RequireRolesAttribute>(); 这应该确保用[RolesRequired]装饰的任何控制器/动作绑定到过滤器.到现在为止还挺好.现在我想通过属性声明角色(很像股票AuthorizeAttribute),并将这些值传递给实际执行授权的过滤器. 预期/伪造代码: [RequireRoles(UserRoles.Author)] public ActionResult Index() { // blah } 特别, 通知AuthorizationFilter角色需要做些什么?过滤器/ ninject可以访问传递给属性的构造函数的参数吗?过滤器/ ninject可以从属性public属性中拉出它们吗? 作为参考,这些文章是一个巨大的帮助,但不要回答这一件事: Dependency Injection with Ninject and Filter attribute for asp.net mvc Custom Authorization MVC 3 and Ninject IoC B Z,Remo Gloor,其他…我该如何完成这个? 解决方法
我已经弄清楚了(谢谢雷姆的指示和文件).
使用适当的.WithConstructorArgument扩展,无论您是绑定到Controller还是Action过滤器.例如绑定我的动作过滤器,如下所示: kernel.BindFilter<AuthorizationFilter>(FilterScope.Action,0) .WhenActionMethodHas<RequireRolesAttribute>() .WithConstructorArgumentFromActionAttribute<RequireRolesAttribute>("requiredRoles",o => o.RequiredRoles); 一旦我明白了Func<>签名,一切都变得清晰.我发现处理这个最好的方法是 >使我的属性的扩展类型特定 .WithConstructorArgumentFromActionAttribute<TAttribute>() 通过lambda从回调对象(你的属性)获取值: ("argumentName",o => o.PropertyName) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在DotNetNuke中使用jQuery UI datepicker而不是
- asp.net – 无法将HttpHandler映射到“路径/ *”通配符映射
- asp.net-core – 在Visual Studio CTP2中的ASP.VNext项目中
- asp.net-mvc – 调试ASP.NET MVC源码?
- ASP.Net 4中ClientIDMode的正确设置是什么,以获得ASP.Net 2
- asp.net – 在表单中使用AjaxControlToolkit的日期选择器控
- asp.net-mvc – 命中错误:在解析器和自定义注册提供程序中
- asp.net-mvc – ASP.NET MVC 4路由 – controller / id与co
- asp.net中一个linq分页实现代码
- asp.net中挺高性能的24种方法
- asp.net – IE超时后重新发送请求?
- 如何为ASP.NET MVC Web应用程序中使用的图像添加
- 为什么ASP.NET接受外部创建的会话标识符?
- 如何用asp.net页面提供javascript?
- asp.net-mvc – Telerik mvc grid,columns.bound
- mvc-mini-profiler – MVC MiniProfiler与ASP.NE
- asp.net-mvc-3 – 如何不使用Ninject的内核作为资
- asp.net – MVC2 – 使用RDF和命名空间使用RSS源
- asp.net – 为VS2010和TFS中的团队管理web.confi
- asp.net – 我被困在UpdatePanel陷阱中