目录
2、在Startup.cs中配置IHttpContextAccessor

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
方法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上下文,特别是在过滤器中。这样可以避免直接在过滤器中引用控制器级别的依赖项。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

347

被折叠的 条评论
为什么被折叠?



