Как получить Конфигурацию, Cookie и DBContext в Фильтре Действий в ASP.Net Core 2.x - PullRequest
0 голосов
/ 20 декабря 2018

Как следует из названия.Как получить доступ к IConfiguration, Cookies и моему DBContext в одном и том же фильтре действий с использованием ASP.NET Core 2.x?

Я могу найти много статей, которые предлагают, как сделать одно или другое, но я не могу найти ничего, чтобы сделать даже два, не говоря уже о всех трех.

Когда я пытаюсь объединить статьи, яобычно получают одну или несколько ошибок времени выполнения.

Есть ли способ сделать это.У меня есть действительно полезная библиотека, которую я пытаюсь перенести из ASP.Net, и я не хочу переписывать все это.

Любая помощь или рабочие примеры будут очень благодарны.Спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

Для доступа к сервисам из конструктора ActionFilter, попробуйте код ниже:

public class RequestLoggerActionFilter : ActionFilterAttribute
{
    private readonly ILogger _logger;
    private readonly IConfiguration _configuration;
    private readonly MVCProContext _context;
    private readonly IHttpContextAccessor _httpContextAccessor;
    public RequestLoggerActionFilter(ILoggerFactory loggerFactory
        , IConfiguration configuration
        , MVCProContext context
        , IHttpContextAccessor httpContextAccessor)
    {
        _logger = loggerFactory.CreateLogger("RequestLogger");
        _configuration = configuration;
        _context = context;
        _httpContextAccessor = httpContextAccessor;
        var cookies = _httpContextAccessor.HttpContext.Request.Cookies;
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {           
        base.OnActionExecuting(context);
    }
}

Если вы хотите получить доступ к OnActionExecuting без внедрения конструктора.

public override void OnActionExecuting(ActionExecutingContext context)
{
    var configuration = context.HttpContext.RequestServices.GetRequiredService<IConfiguration>();
    var cookies = context.HttpContext.Request.Cookies;
    var db = context.HttpContext.RequestServices.GetRequiredService<MVCProContext>();
    base.OnActionExecuting(context);
}

Для использования ActionFilter в действии контроллера.

[TypeFilter(typeof(RequestLoggerActionFilter))]
public ActionResult RequestLogger()
{
    return Ok("RequestLoggerActionFilter");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...