我尝试使用IActionFilter
创建自定义属性:
属性:
public class MyAuthorize : TypeFilterAttribute
{
public int Id { get; set; }
public MyAuthorize() : base(typeof(MyAuthorizeImplement))
{
Arguments = new object[] { Id };
}
private class MyAuthorizeImplement : IActionFilter
{
private readonly int _id;
public MyAuthorizeImplement(int id)
{
_id = id;
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
context.Result = new ContentResult
{
Content = $"Id: {_id}"
};
}
}
}
动作:
public class HomeController : Controller
{
[MyAuthorize(Id = 1)]
public IActionResult Index()
{
return View();
}
}
结果内容:
Id:0
我已尝试多次使用不同的Id
值,但_id
仍为0
默认值。然后,我尝试将Id
,id
和_id
的值类型从int
更改为string
并传递了一些值,但它是&#39 ; s仍然是null
:
[MyAuthorize(Id = "abc")]
我错过了什么吗?谢谢!
P / S:我也尝试过这种方式,它有效,但我不想使用它:在构造函数中,尝试使用id
作为参数而不是属性:
// public int Id { get; set; }
public MyAuthorize(int id) : base(typeof(MyAuthorizeImplement))
{
Arguments = new object[] { id };
}
动作:
public class HomeController : Controller
{
[MyAuthorize(id: 1)]
public IActionResult Index()
{
return View();
}
}
结果内容:
Id:1
在第一种情况下,构造函数不需要任何参数,它是一个选项但在第二种情况下它是一个选项。这就是我不想使用它的原因。
当我需要一些rule
(Id
,Roles
,Name
...)时,我可以通过它。否则,请将其留空。就像Authorize
属性:
[Authorize] -> All login user can assign
[Authorize(Roles = "Administrator")] -> Only user with this role can assign