在自定义属性中访问MVC5属性路由参数?

时间:2015-02-24 23:09:50

标签: asp.net-mvc asp.net-web-api custom-attributes attributerouting

我在使用MVC5和属性路由的WebAPI项目时遇到了一些麻烦。

基本上,这就是我想要做的事情:

[Route("Products/{CategoryId}")]
[ClaimsAuthorize([{CategoryId}], ClaimsEnum.CanViewProducts)]
public Products Get(){
  ...
}

其中[{CategoryId}]是我想将CategoryId传递给属性处理程序的地方。 CustomAttribute处理程序如下所示:

public ClaimsAuthorizeAttribute(string CategoryId, params ClaimsEnum[] requiredClaimTypes)

其中ClaimsAuthorize是一个覆盖Authorize属性的自定义属性。

如何从自定义属性访问CategoryId参数?这可能吗?或者是否有另一种方法将其传递给属性处理程序?

这是伪代码,但描述了我的问题。我需要知道在处理授权时通过请求URL传递的类别。我知道我可以使用标题,但如果可以,我想在URL中保持可见的内容。

谢谢:)

1 个答案:

答案 0 :(得分:0)

我最终使用了这种方法:

[ProtectedController]

[Route("Products/{CategoryId}")]
[ClaimsAuthorize(ClaimsEnum.CanViewProducts)]
public Products Get(){
  ...
}

ClaimsAuthorizeAttribute.cs

protected override bool IsAuthorized(HttpActionContext actionContext)
        {
_categoryId = actionContext.ControllerContext.RouteData.Values["CategoryId"].ToString();