目录
方法1:使用ActionExecutingContext
方法2:使用依赖注入和IActionFilter接口
1、添加对IHttpContextAccessor的引用
2、在Startup.cs中配置IHttpContextAccessor
方法3:直接从控制器访问参数(不推荐作为过滤器使用)
总结

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
方法1:使用ActionExecutingContext
在OnActionExecuting方法中,你可以通过传递的ActionExecutingContext参数来访问请求参数。这通常是通过ActionContext属性实现的,它包含了当前请求的HttpContext。
public override void OnActionExecuting(ActionExecutingContext context) { var httpContext = context.HttpContext; var queryString = httpContext.Request.Query; // 获取查询字符串参数 var formData = httpContext.Request.Form; // 获取表单数据 var routeData = httpContext.Request.RouteValues; // 获取路由数据 // 例如,获取名为"id"的查询字符串参数 var id = queryString["id"];
// 或者获取表单中的数据 var name = formData["name"];
// 或者获取路由中的数据 var routeId = routeData["id"]; }

方法2:使用依赖注入和IActionFilter接口
如果你需要更灵活地访问请求参数,可以在IActionFilter的实现中注入IHttpContextAccessor。首先,确保你的项目中已经添加了对Microsoft.AspNetCore.Http的引用,并且在Startup.cs中配置了IHttpContextAccessor。
1、添加对IHttpContextAccessor的引用
public class MyActionFilter : IActionFilter { private readonly IHttpContextAccessor _httpContextAccessor; public MyActionFilter(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void OnActionExecuting(ActionExecutingContext context) { var httpContext = _httpContextAccessor.HttpContext; // 现在可以使用httpContext来访问请求参数了 } public void OnActionExecuted(ActionExecutedContext context) { } }
2、在Startup.cs中配置IHttpContextAccessor
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddHttpContextAccessor(); // 添加这一行以启用IHttpContextAccessor services.AddScoped<MyActionFilter>(); // 注册你的过滤器 }

方法3:直接从控制器访问参数(不推荐作为过滤器使用)
如果你只是想在控制器内部访问请求参数,可以直接在控制器的方法参数中使用,例如:
public IActionResult MyAction([FromQuery] string id) { // 使用id参数… }
但如果你确实需要在过滤器中这么做(例如,为了日志记录或验证),则应使用上述的IHttpContextAccessor方法。
总结
通常,推荐使用方法2(通过依赖注入和使用IHttpContextAccessor),因为它提供了更灵活且解耦的方式来访问HTTP上下文,特别是在过滤器中。这样可以避免直接在过滤器中引用控制器级别的依赖项。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。


