.NET核心操作筛选器不是属性类

时间:2018-12-20 11:33:58

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

我有要调用的动作过滤器,我已经在Startup.cs中声明了它。但是,当我在班级上方调用它时,出现此错误:

  

LogUserNameFilter不是属性类

我不确定我缺少什么。

public class LogUserNameFilter : IActionFilter
{
    private readonly RequestDelegate next;

    public LogUserNameFilter(RequestDelegate next)
    {
        this.next = next;
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        throw new NotImplementedException();
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        LogContext.PushProperty("UserName", context.HttpContext.User.Identity.Name);
    }
}

Startup.cs

services.AddScoped<LogUserNameFilter>();

类声明

[LogUserNameFilter]
public class HomeController : Controller{


}

1 个答案:

答案 0 :(得分:2)

为了将类用作属性,该类应继承Attribute类,具体而言,您应继承ActionFilterAttribute

public class LogUserNameFilter : ActionFilterAttribute, IActionFilter
{
    private readonly RequestDelegate next;

    public LogUserNameFilter(RequestDelegate next)
    {
        this.next = next;
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        throw new NotImplementedException();
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        LogContext.PushProperty("UserName", context.HttpContext.User.Identity.Name);
    }
}

您可以在MSDN

中找到更多使用信息。