.NET Core Action Filter 不是属性类

Jia*_*nYA 5 asp.net-core-mvc asp.net-core

我有这个想要调用的动作过滤器,我已经在 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

启动文件

services.AddScoped<LogUserNameFilter>();
Run Code Online (Sandbox Code Playgroud)

类声明

[LogUserNameFilter]
public class HomeController : Controller{


}
Run Code Online (Sandbox Code Playgroud)

Ofi*_*ris 6

为了使用类作为属性,该类应该继承该类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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在MSDN中找到更多使用信息

  • 您将无法将此类实例化为属性。 (2认同)