我想将当前区域名称传递给授权属性,例如:
[SexyAuthorize(Roles = Url.RequestContext.RouteData.Values["area"])]
public class FormsController : Controller
{
}
但是Url是控制器的成员。我怎么能以其他方式传递它?
我知道我可以在每种方法中使用User.InRole,但我想在课堂上这样做。谢谢。
答案 0 :(得分:0)
您无法将动态值传递给此类属性。传递给.NET中的属性的所有值都需要在编译时知道。一种可能的解决方法是在您可以访问HTTP上下文时在属性的自定义实现中获取此值。
类似的东西:
[SexyAuthorize(RolesRouteParamName = "area")]
public class FormsController : Controller
{
...
}
然后:
public SexyAuthorizeAttribute: AuthorizeAttribute
{
public string RolesRouteParamName { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
var roles = httpContext.Request.RequestContext.RouteData.Value[RolesRouteParamName];
// TODO: continue with the implementation...
...
}
}