Asp.net mvc 访问ASP.NET MVC操作参数

Asp.net mvc 访问ASP.NET MVC操作参数,asp.net-mvc,Asp.net Mvc,这一定很简单,但我似乎不明白。我正在操作过滤器内设置一个操作参数,如下所示: public class MyFilter : ActionFilterAttribute { public override void OnActionExecuting (ActionExecutingContext filterContext) { filterContext.ActionParameters["MyParam"] = "MyValue"; } } [M

这一定很简单,但我似乎不明白。我正在操作过滤器内设置一个操作参数,如下所示:

public class MyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting (ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["MyParam"] = "MyValue";
    }
}
 [MyFilter]
 public class HomeController : Controller
 {
      public ActionResult Index()
      {
           // How do I access MyParam here?
           return View();
      }
 }
我将过滤器应用于整个控制器,如下所示:

public class MyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting (ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["MyParam"] = "MyValue";
    }
}
 [MyFilter]
 public class HomeController : Controller
 {
      public ActionResult Index()
      {
           // How do I access MyParam here?
           return View();
      }
 }
}

如何在操作方法中访问MyParam?

也许您可以使用:

[MyFilter]
public ActionResult Index(string MyParam)
{
       //Do something with MyParam           
       return View();
}

您可以使用
[MyFilter]
或只需一个操作来装饰整个控制器。

我希望这能起作用:

var myParam = ValueProvider.GetValue("MyParam").RawValue as string;

由于ModelBinder使用
ValueProvider
获取值,我认为它应该能够获取过滤器中设置的值。

您的URL是什么样子的?在这种情况下,我的URL只是访问索引操作方法(主页)。因此,MyParam不是来自URL,而是使用ActionParameters属性在操作过滤器内设置的。我的代码更复杂,为了清晰起见,我举了一个简单的例子。@Ralph Stevens:您尝试过这个解决方案吗:)?它适用于过滤器中设置的参数。我同意它可能有效,但这可能不是一个非常优雅的解决方案。过滤器将应用于整个控制器。一些操作方法将使用它,其他方法可能不使用。必须有另一种方法从action方法内部访问action参数(根据需要)。@Ralph Stevens:所以有些action方法会有这个参数,而有些则不会。您不必在每个操作方法中定义此参数。我可以说,在不需要时设置参数是不优雅的:)为什么说以强类型方式访问参数是不优雅的?我明白了。所以我只在一些方法中声明它。将此参数传递给action方法会影响传递给同一action方法的其余URL参数吗?