dja*_*109 4 c# asp.net asp.net-mvc asp.net-core
正如标题所暗示的那样。如何使用 ASP.NET Core 2.x 在同一个操作过滤器中访问 IConfiguration、Cookies 和我的 DBContext?
我可以找到许多建议如何做其中一项的文章,但我什至找不到任何可以做的事情,更不用说所有三项了。
当我尝试合并文章时,我通常会遇到一个或多个运行时错误。
有没有办法做到这一点。我有一个非常有用的库,我正在尝试从 ASP.Net 移植过来,但我真的不想全部重写它。
任何帮助或工作示例将不胜感激。谢谢
要从 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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想在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);
}
Run Code Online (Sandbox Code Playgroud)
用于ActionFilter在控制器动作中使用。
[TypeFilter(typeof(RequestLoggerActionFilter))]
public ActionResult RequestLogger()
{
return Ok("RequestLoggerActionFilter");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |