对其他属性使用属性路由参数
Use attribute routing parameters for other attributes
我使用属性路由 (MVC) 来调用控制器方法以及具有自定义属性的授权属性:
[Route("{id:int}")]
[UserAuth(ProjectId=3)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
UserAuth 只是一个简单的 AuthorizationAttribute:
public class UserAuthAttribute:AuthorizeAttribute {
public int ProjectId { get;set;}
protected override bool AuthorizeCore(HttpContextBase contextBase) {
var currentProject=new Project(ProjectId);
return currentProject.UserIsMember()
}
}
现在我想将其与 projectId 的参数一起使用。以下代码 不起作用 但应该显示我想要实现的目标(我不能只添加 ID)
[Route("{id:int}")]
[UserAuth(ProjectId=id)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
您不需要从 AuthorizationAttribute 传递 id。你可以从请求中得到它。
你的动作看起来像
[Route("{id:int}")]
[UserAuth]
public ActionResult Select(int id)
{
return View();
}
在您的属性 class 中,您可以获得路由值。
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;
}
}
}
我使用属性路由 (MVC) 来调用控制器方法以及具有自定义属性的授权属性:
[Route("{id:int}")]
[UserAuth(ProjectId=3)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
UserAuth 只是一个简单的 AuthorizationAttribute:
public class UserAuthAttribute:AuthorizeAttribute {
public int ProjectId { get;set;}
protected override bool AuthorizeCore(HttpContextBase contextBase) {
var currentProject=new Project(ProjectId);
return currentProject.UserIsMember()
}
}
现在我想将其与 projectId 的参数一起使用。以下代码 不起作用 但应该显示我想要实现的目标(我不能只添加 ID)
[Route("{id:int}")]
[UserAuth(ProjectId=id)]
public ActionResult Select(int id) {
return JsonGet(Magic.DoSomethingMagic());
}
您不需要从 AuthorizationAttribute 传递 id。你可以从请求中得到它。
你的动作看起来像
[Route("{id:int}")]
[UserAuth]
public ActionResult Select(int id)
{
return View();
}
在您的属性 class 中,您可以获得路由值。
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;
}
}
}