我在使用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中保持可见的内容。
谢谢:)
答案 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();