欢迎光临
我们一直在努力

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

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

赞(0)
未经允许不得转载:171主机测评 » 在ASP.NET Core中ActionFilterAttribute的OnActionExecuting方法中获取请求参数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址