在ASP.NET Core中ActionFilterAttribute的OnActionExecuting方法中获取请求参数

目录

方法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上下文,特别是在过滤器中。这样可以避免直接在过滤器中引用控制器级别的依赖项。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hefeng_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值