获取 OnActionExecuting 上的操作参数

use*_*677 7 .net c# asp.net-core-mvc asp.net-core

使用.NET core MVC C#

我有一个控制器:

[ServiceFilter(typeof(MyCustomFilter))]
public class HomeController : Controller
{
    public IActionResult Index(string type)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

type在我的过滤器中,我想获取作为查询字符串传递的字符串值。

我的过滤器为:

  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MyCustomFilter: ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
          //this is always null
           string id = filterContext.RouteData.Values["type"].ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么吗?因为我读过一些帖子,并且他们提到了上面的内容来做到这一点。

Rac*_*lan 5

对于查询字符串中传递的参数,请使用:

string id = filterContext.Request.Query["type"];
Run Code Online (Sandbox Code Playgroud)


小智 5

我相信你可以使用类似下面的东西。我在日志过滤器中使用类似于下面的内容。日志过滤器代码也如下。您也可以迭代该集合。

string id = filterContext.ActionParameters["Type"];
Run Code Online (Sandbox Code Playgroud)

迭代所有参数并将它们聚合到最终写入文件的日志字符串中。

logString = filterContext.ActionParameters.Aggregate(logString, (current, p) => current + (p.Key + ": " + p.Value + Environment.NewLine));
Run Code Online (Sandbox Code Playgroud)