使用属性路由参数为其他属性 [英] Use attribute routing parameters for other attributes
问题描述
我使用属性路由(MVC)来调用控制器方法,也是一种Authorizationattribute定制属性:
[路线({ID:INT})]
[USERAUTH(专案编号= 3)]
公众的ActionResult选择(INT ID){
返回JsonGet(Magic.DoSomethingMagic());
}
USERAUTH只是一个简单AuthorizationAttribute:
公共类UserAuthAttribute:AuthorizeAttribute {
公众诠释专案编号{获取;设置;}
保护覆盖布尔AuthorizeCore(HttpContextBase contextBase){
VAR currentProject =新项目(专案编号);
返回currentProject.UserIsMember()
}
}
现在我想与为专案编号参数使用。下面code 不起作用,但应该显示我想达到什么(我不能只是添加ID)
[路线({ID:INT})]
[USERAUTH(专案编号= ID)]
公众的ActionResult选择(INT ID){
返回JsonGet(Magic.DoSomethingMagic());
}
您不需要从你AuthorizationAttribute通ID。你可以从要求得到它。
你的行动看起来像
[路线({ID:INT})]
[USERAUTH]
公众的ActionResult选择(INT ID)
{
返回查看();
}
和您的属性类中,你可以得到路由值。
公共类UserAuthAttribute:AuthorizeAttribute
{
公众诠释专案编号{搞定;组; }
保护覆盖布尔AuthorizeCore(HttpContextBase contextBase)
{
VAR getRouteData = contextBase.Request.RequestContext.RouteData.Values [ID];
如果(getRouteData!= NULL)
{
专案编号= Int32.Parse(getRouteData.ToString());
}
如果(专案编号→5)
{
返回true;
}
其他
{
返回false;
}
}
}
I use Attribute Routing (MVC) to call Controller Methods and also an Authorizationattribute with custom Properties:
[Route("{id:int}")]
[UserAuth(ProjectId=3)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
UserAuth is just a simple AuthorizationAttribute:
public class UserAuthAttribute:AuthorizeAttribute {
public int ProjectId { get;set;}
protected override bool AuthorizeCore(HttpContextBase contextBase) {
var currentProject=new Project(ProjectId);
return currentProject.UserIsMember()
}
}
Now I want to use this with a parameter for the projectId. The following code does not work but should show what I want to achieve (I cannot just add the id)
[Route("{id:int}")]
[UserAuth(ProjectId=id)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
you don't need to pass id from your AuthorizationAttribute. you can get it from request.
your action will look like
[Route("{id:int}")]
[UserAuth]
public ActionResult Select(int id)
{
return View();
}
And inside your attribute class, you can get route values.
public class UserAuthAttribute: AuthorizeAttribute
{
public int ProjectId { get; set; }
protected override bool AuthorizeCore(HttpContextBase contextBase)
{
var getRouteData =contextBase.Request.RequestContext.RouteData.Values["id"];
if(getRouteData != null)
{
ProjectId = Int32.Parse(getRouteData.ToString());
}
if(ProjectId > 5)
{
return true;
}
else
{
return false;
}
}
}
这篇关于使用属性路由参数为其他属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!