【问题标题】:Pass argument to a Controller from Action Filter将参数从动作过滤器传递给控制器
【发布时间】:2019-01-02 20:03:23
【问题描述】:

我可以将参数从动作过滤器传递给控制器​​,特别是通过参数(在 ASP.NET Core 中)吗?

例如:

public class CategoryController : Controller
{
    [HttpGet]
    [ServiceFilter(typeof(ApiFilter))]
    public async Task<IActionResult> Index(string dataComingFromActionFilter)
    {
        //use dataComingFromActionFilter
    }
}

还有

public class ApiFilter: IActionFilter 
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        //maybe something similar to
        context.sendToActionAsArgument['dataComingFromActionFilter'] = "data";

    }
}

【问题讨论】:

  • 看起来很有希望:docs.microsoft.com/en-us/dotnet/api/…
  • 是的,它适用于 ASP.NET MVC。我正在寻找 ASP CORE 中的等效函数
  • 对,对不起。但是你有控制器实例作为上下文属性,你可以使用它吗?还是 RouteData?
  • 定义一个公开字典的接口。在控制器上实现该接口。将控制器属性转换为接口,并在过滤器中设置字典。您应该能够看到 action 方法中的值。
  • 每个请求都有自己独特的上下文。

标签: asp.net-core .net-core action-filter


【解决方案1】:

你可以使用

 context.ActionArguments["dataComingFromActionFilter"] = "data";

用于更新现有的动作参数。如果需要添加新参数,那么

context.ActionArguments.Add("dataComingFromActionFilter", "data"); 

那么就可以通过Controller Action来实现了

【讨论】:

  • 感谢您的帮助。设置参数效果很好。我有一个关于添加新参数的问题。如何在控制器中使用添加的参数?
【解决方案2】:

在HttpContext的Items集合中设置属性值:

context.HttpContext.Items.Add("DataFromAttribute", date);

并且在控制器中以同样的方式读取它们:

this.HttpContext.Items["DataFromAttribute"];

【讨论】:

    【解决方案3】:

    尝试使用下面的代码来查看它的工作原理。

    public class PersonFilterAttribute: Attribute, IAsyncActionFilter
        {
            public PersonFilterAttribute()
            {
            }
    
            public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
            {
              context.ActionArguments.Add("personService", new PersonService("Thomas", 29,"Miami");       
              await next();
            }
        }
        
    And In the controller read them in the same way:
    
    this.HttpContext.Items["personService"];
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多