ASP.NET Core 2.1如何将变量传递给TypeFilter

时间:2018-10-18 07:32:04

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc

我创建了这个类型过滤器,该过滤器应该带有2个变量,以便它发送到链接到该过滤器的方法。但是,我无法附加我的2个变量以使其运行。

public class RolesFilterAttribute : TypeFilterAttribute
{
    public RolesFilterAttribute() : base(typeof(RolesFilterAttributeImpl))
    {

    }

    private class RolesFilterAttributeImpl : IActionFilter
    {
        private readonly ValidateRoleClient validateRoleClient;
        private string Role;
        private string SecretKey;
        public RolesFilterAttributeImpl(string Role, string SecretKey, ValidateRoleClient validateRoleClient)
        {
            this.validateRoleClient = validateRoleClient;
            this.Role = Role;
            this.SecretKey = SecretKey;
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.HttpContext.Request.Cookies["Token"] != null || context.HttpContext.Request.Cookies["RefreshToken"] != null)
            {
                TokenViewModel tvm = new TokenViewModel
                {
                    Token = context.HttpContext.Request.Cookies["Token"],
                    RefreshToken = context.HttpContext.Request.Cookies["RefreshToken"]
                };
                ValidateRoleViewModel vrvm = new ValidateRoleViewModel
                {
                    Role = Role,
                    SecretKey = SecretKey,
                    Token = tvm
                };
                validateRoleClient.ValidateRole(vrvm);
            }
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            throw new NotImplementedException();
        }
    }
}

这就是我声明过滤器的方式,它可以正常编译。但是,我无法通过它传递必需的变量,即SecretKey和Role。我的类型过滤器声明正确吗?

[TypeFilter(typeof(RolesFilterAttribute))]
public IActionResult About()
{
    return View();
}

1 个答案:

答案 0 :(得分:1)

来自官方documentation

[TypeFilter(typeof(AddHeaderAttribute),
    Arguments = new object[] { "Author", "Steve Smith (@ardalis)" })]
public IActionResult Hi(string name)
{
    return Content($"Hi {name}");
}