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 – 干净的方式来防止输入按钮提交表单
- .NET发送电子邮件的最佳方法(System.Net.Mail有问题)
- asp.net-mvc-4 – 通过ADAL JavaScript Ajax和KnockoutJs的
- asp.net-core – asp.net核心身份中的多个SubDomain的cooki
- ASP.NET MVC与Webforms与HTTP处理程序(.ashx) – 哪个是最轻
- asp.net-mvc-3 – 如何使MVC3 DisplayFor显示枚举显示属性的
- MVC .Net Cascade在使用EF Code First Approach时删除
- asp.net – 在.NET 4下编译时出现“具有相同密钥的条目已存
- asp.net – SCRIPT5022:Sys.WebForms.PageRequestManagerS
- asp.net-mvc-3 – 修改StringLength验证的默认ErrorMessage
- asp.net-mvc – 避免“类或CssClass值未定义”AS
- ASP.NET,jQuery,脏窗体和window.onbeforeunload
- ASP.NET从内存而不是从文件中流内容
- asp.net核心 – 无法使用托管代理在Visual Studi
- asp.net – .NET 4中的SignalR支持
- ASP.NET web.config:system.web.compilation中的
- ASP.NET HttpApplication.EndRequest事件未被触发
- asp.net-mvc-3 – 使用redirectAction和prg模式在
- asp.net-mvc – 更新到MVC 5后,iframe不再有效
- asp.net-mvc – 如何从剃刀视图访问My.Resources
