.NET Core Action Filter не является классом атрибутов - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот фильтр действий, который я хочу вызвать, я уже объявил его в 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 голосов
/ 20 декабря 2018

Чтобы использовать класс в качестве атрибута, класс должен наследовать класс 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...