将参数从操作过滤器传递给控制器

Abd*_*rim 4 action-filter .net-core asp.net-core

是否可以将操作筛选器中的参数传递给控制器​​,尤其是通过参数传递(在ASP.NET Core中)?

例如:

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Der*_*ğlu 6

您可以使用

 context.ActionArguments["dataComingFromActionFilter"] = "data";
Run Code Online (Sandbox Code Playgroud)

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

context.ActionArguments.Add("dataComingFromActionFilter", "data"); 
Run Code Online (Sandbox Code Playgroud)

然后您可以通过Controller Action来实现

  • 感谢您的帮助。设置参数效果很好。我对添加新参数有疑问。如何在控制器中使用添加的参数? (2认同)

Lev*_*v Z 6

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

context.HttpContext.Items.Add("DataFromAttribute", date);
Run Code Online (Sandbox Code Playgroud)

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

this.HttpContext.Items["DataFromAttribute"];
Run Code Online (Sandbox Code Playgroud)