来自httpcontext的asp mvc角色

时间:2011-02-17 11:56:39

标签: asp.net-mvc-2

我想将当前区域名称传递给授权属性,例如:

[SexyAuthorize(Roles = Url.RequestContext.RouteData.Values["area"])]
public class FormsController : Controller
{
}

但是Url是控制器的成员。我怎么能以其他方式传递它?

我知道我可以在每种方法中使用User.InRole,但我想在课堂上这样做。谢谢。

1 个答案:

答案 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...
        ...
    }
}