从服务过滤器向操作过滤器添加参数
Add parameter to the action filter from service filter
我在控制器中使用服务过滤器属性。在服务过滤器中,我调用了动作过滤器,在动作过滤器内部,我执行了像 OnActionExecution
.
这样的动作方法
我的情况是从控制器传递参数。使用该参数,我需要在操作过滤器 class.
中执行必要的操作
控制器
[HasPermission(1)]
public async Task<ActionResult> GetDetailsAsync()
{
-----
}
服务过滤器
public class HasPermissionAttribute : ServiceFilterAttribute
{
public HasPermissionAttribute()
: base(typeof(HasPermissionAsyncFilter))
{
}
}
动作过滤器
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
-------------Need to use the values passed from the attribute-------
}
}
注:
需要传递属性中的值
有权限(1)
有权限(2)
像这样……
TypeFilterAttribute 与 [ServiceFilterAttribute]
相似,但允许您传递参数:
public class HasPermissionAttribute : TypeFilterAttribute // Changed parent class
{
public HasPermissionAttribute(int value)
: base(typeof(HasPermissionAsyncFilter))
{
Arguments = new object[] { value };
}
}
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
private readonly int _permissionValue;
public HasPermissionAsyncFilter(int permissionValue)
{
_permissionValue = permissionValue;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// -------------Need to use the values passed from the attribute-------
var x = _permissionValue;
}
}
我在控制器中使用服务过滤器属性。在服务过滤器中,我调用了动作过滤器,在动作过滤器内部,我执行了像 OnActionExecution
.
我的情况是从控制器传递参数。使用该参数,我需要在操作过滤器 class.
中执行必要的操作控制器
[HasPermission(1)]
public async Task<ActionResult> GetDetailsAsync()
{
-----
}
服务过滤器
public class HasPermissionAttribute : ServiceFilterAttribute
{
public HasPermissionAttribute()
: base(typeof(HasPermissionAsyncFilter))
{
}
}
动作过滤器
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
-------------Need to use the values passed from the attribute-------
}
}
注:
需要传递属性中的值
有权限(1)
有权限(2)
像这样……
TypeFilterAttribute 与 [ServiceFilterAttribute]
相似,但允许您传递参数:
public class HasPermissionAttribute : TypeFilterAttribute // Changed parent class
{
public HasPermissionAttribute(int value)
: base(typeof(HasPermissionAsyncFilter))
{
Arguments = new object[] { value };
}
}
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
private readonly int _permissionValue;
public HasPermissionAsyncFilter(int permissionValue)
{
_permissionValue = permissionValue;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// -------------Need to use the values passed from the attribute-------
var x = _permissionValue;
}
}